Enum
public enum Property {
A,
AB,
ABC;
}
Champ
@Value("${custom.property}")
protected Property property;
application.properties (minuscule)
custom.property=abc
Quand j'exécute une application, j'ai une erreur:
Impossible de convertir la valeur de type [Java.lang.String] en type requis [com.xxx.Property]: aucun éditeur ni conversion correspondante stratégie trouvée.
Considérant que (majuscule):
custom.property=ABC
Fonctionne bien.
Y at-il un moyen de lier la valeur insensible à la casse? Comme ABC, Abc, AbC, abc, tout modèle devrait fonctionner.
Remarque: j'ai vu cette question - Spring 3.0 MVC binding Enums Case Sensitive mais dans mon cas, j'ai plus de 10 énums/valeurs (et espère avoir plus) classes et à implémenter 10 différents classeurs de propriété personnalisée serait pénible, je besoin d'une solution générique.
Les fonctions @Value
et @ConfigurationProperties
ne correspondent pas. Je ne saurais trop insister sur la supériorité de @ConfigurationProperties
.
Tout d’abord, vous devez concevoir votre configuration dans un simple POJO que vous pouvez injecter où vous voulez (au lieu d’avoir des expressions dans les annotations que vous pouvez facilement briser avec une faute de frappe). Deuxièmement, la prise en charge des méta-données signifie que vous très facilementobtenez la complétion automatique dans votre IDE pour vos propres clés .
Et enfin, la liaison relâchée décrite dans la doc ne s'applique qu'à @ConfigurationProperties
. @Value
est une fonctionnalité de Spring Framework et ignore les liaisons détendues. Nous avons l’intention de préciser cela dans la doc .
TL; DR abc
fonctionne avec @ConfigurationProperties
mais pas avec @Value
.
Les valeurs sont sensibles à la casse (considérez les clés ou les mots de passe injectés à partir de l'environnement), et la liaison relâchée ne s'applique qu'aux clés. Les noms Java enum sont également sensibles à la casse (A
et a
sont des valeurs distinctes), et vous ne voudriez pas écraser la casse.
Utilisez simplement la casse appropriée dans vos propriétés de configuration.