web-dev-qa-db-fra.com

Comment définir @Value comme optionnel

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

87
user1052610

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}}")
141
Andy Brown

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!

31
alonso_50