J'ai le suivant 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 sous la forme d'un paramètre de ligne de commande (qui est ensuite ajouté au contexte Spring à l'aide de SimpleCommandLinePropertySource) et cet argument n'existera pas toujours.
J'ai essayé les deux éléments suivants 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 lorsqu'il existe une valeur réelle - il semble remplacer ce que Spring devrait injecter.
Quelle est la bonne façon de spécifier que @ Value n'est pas obligatoire?
Merci
Quelle est la bonne façon de spécifier que @Value n'est pas obligatoire?
Travailler sur l'hypothèse que par "non requis" vous voulez dire null
alors ...
Vous avez correctement noté que vous pouvez fournir une valeur par défaut à la droite du 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 les expressions SPEL , et une expression SPEL simple pour renvoyer null
est:
@Value("${myValue:#{null}}")
Si vous utilisez Java 8, vous pouvez tirer parti de son Java.util.Optional
classe. Il suffit de déclarer la variable de la manière suivante:
@Value("${myValue:#{null}}")
private Optional<String> value;
Ensuite, vous pouvez vérifier si la valeur est définie ou non de manière plus agréable:
if (value.isPresent()) {
// do something cool
}
J'espère que ça aide!