J'utilise actuellement l'annotation @Value Spring 3.1.x comme ceci:
@Value("${stuff.value:}")
private String value;
Cela place une chaîne vide dans la variable si l'attribut n'est pas présent. Je voudrais avoir null comme valeur par défaut au lieu d'une chaîne vide. Bien sûr, je souhaite également éviter une erreur lorsque la propriété stuff.value n'est pas définie.
java
spring
spring-annotations
Kevin Schmidt
la source
la source
C'est vraiment vieux, mais vous pouvez utiliser Spring EL maintenant, par exemple
@Value("${stuff.value:#{null}}")
Voir cette question .
la source
Merci à @vorburger:
définira la valeur de la chaîne à null sans aucune autre configuration.
la source
Je donne du crédit à @nosebrain car je ne connaissais pas la "valeur nulle", mais je préfère éviter d'utiliser des valeurs nulles, d'autant plus que c'est difficile à représenter
null
dans un fichier de propriétés.Mais voici une alternative utilisant null sans
null-value
pour cela fonctionnera avec n'importe quel espace réservé de propriété.Personnellement, je préfère mon chemin parce que peut-être plus tard vous voudrez
stuff.value
être une valeur séparée par des virgules ou peut-être enum, le commutateur est plus facile. C'est aussi plus facile à tester unitaire :)EDIT: basé sur vos commentaires sur l'utilisation des énumérations et mon opinion de ne pas utiliser null.
Ce qui précède fonctionne très bien pour moi. Vous évitez null. Si vos fichiers de propriétés veulent définir explicitement qu'ils ne veulent pas le gérer, vous le faites ( mais vous n'avez même pas à le spécifier car il sera par défaut NOTSET ).
null
est très mauvais et est différent deNOTSET
. Cela signifie que le test de ressort ou d'unité ne l'a pas réglé, c'est pourquoi il y a une différence à mon humble avis. J'utiliserais probablement toujours la notation de setter (exemple précédent) car son test unitaire est plus facile (les variables privées sont difficiles à définir dans un test unitaire).la source
@Value("${stuff.value:NOTSET}")
marcherait pas ?Au cas où vous auriez besoin d'injecter une chaîne vide (longueur 0) "" comme @Value default - utilisez SPEL (Spring Expression Language) comme suit:
# {''} vous donne juste une chaîne vide comme la valeur par défaut de @ Value.
par yl
la source