J'ai ce qui suit dans un haricot de printemps:
@Value("${myValue}")
private String value;
La valeur est correctement injectée. Cependant, la variable doit être facultative, elle est transmise en tant que paramètre de ligne de commande (qui est ensuite ajouté au contexte Spring à l'aide d'un SimpleCommandLinePropertySource ), et cet argument n'existera pas toujours.
J'ai essayé les deux méthodes suivantes afin de fournir une valeur par défaut:
@Value("${myValue:}")
@Value("${myValue:DEFAULT}")
mais dans chaque cas, l'argument par défaut après les deux-points est injecté même s'il y a une valeur réelle - cela semble remplacer ce que Spring devrait injecter.
Quelle est la manière correcte de spécifier que @Value n'est pas obligatoire?
Merci
spring
spring-bean
user1052610
la source
la source
@Value("${some.prop:}")
fonctionne pour moi. C'est la seule annotation sur cette variable.Réponses:
En partant du principe que par `` non requis '' vous entendez
null
alors ...Vous avez correctement noté que vous pouvez fournir une valeur par défaut à droite d'un
:
caractère. Votre exemple était@Value("${myValue:DEFAULT}")
.Vous n'êtes pas limité aux chaînes simples comme valeurs par défaut. Vous pouvez utiliser des expressions SPEL , et une expression SPEL simple à renvoyer
null
est:la source
Si vous utilisez Java 8, vous pouvez profiter de sa
java.util.Optional
classe. Il vous suffit de déclarer la variable de cette façon:Ensuite, vous pouvez vérifier si la valeur est définie ou non d'une manière plus agréable:
J'espère que ça aide!
la source
Optional
types dans les champs de classe.value
est nul.