webentwicklung-frage-antwort-db.com.de

So definieren Sie @Value als optional

Ich habe folgendes in einer Frühlingsbohne:

@Value("${myValue}")
private String value;

Der Wert wird korrekt eingespeist. Die Variable muss jedoch optional sein. Sie wird als Befehlszeilenparameter übergeben (der dann mit einem SimpleCommandLinePropertySource zum Spring-Kontext hinzugefügt wird), und dieses Argument ist nicht immer vorhanden.

Ich habe beide der folgenden versucht, um einen Standardwert bereitzustellen:

@Value("${myValue:}")
@Value("${myValue:DEFAULT}")

in jedem Fall wird das Standardargument nach dem Doppelpunkt auch dann eingefügt, wenn ein tatsächlicher Wert vorliegt. Dies scheint zu überschreiben, was Spring einfügen soll.

Wie kann ich richtig angeben, dass @ Value nicht erforderlich ist?

Vielen Dank

87
user1052610

Wie kann ich richtig angeben, dass @Value nicht erforderlich ist?

Unter der Annahme, dass mit "nicht erforderlich" null gemeint ist, dann ...

Sie haben richtig bemerkt, dass Sie einen Standardwert rechts von einem : - Zeichen angeben können. Ihr Beispiel war @Value("${myValue:DEFAULT}").

Sie sind nicht auf einfache Zeichenfolgen als Standardwerte beschränkt. Sie können SPEL Ausdrücke verwenden und einen einfachen SPEL-Ausdruck verwenden, um null zurückzugeben:

@Value("${myValue:#{null}}")
141
Andy Brown

Wenn Sie Java 8 verwenden, können Sie dessen Java.util.Optional Klasse. Sie müssen die Variable nur folgendermaßen deklarieren:

@Value("${myValue:#{null}}")
private Optional<String> value;

Anschließend können Sie überprüfen, ob der Wert besser definiert ist oder nicht:

if (value.isPresent()) {
    // do something cool
}

Ich hoffe es hilft!

31
alonso_50