Spring Boot bindet @Value an Enum case insensitive

9

Ich habe eine application.properties mit einer Eigenschaft:

%Vor%

Ich habe ein Feld in der Klasse:

%Vor%

Ich habe ein enum:

%Vor%

Wenn ich Anwendung mit einem

ausführe %Vor%

Ich habe einen Fehler:

  

Der Wert des Typs [java.lang.String] kann nicht in den erforderlichen Typ konvertiert werden   [com.blabla.domain.enums.Property]: keine übereinstimmenden Editoren oder Konvertierungen   Strategie gefunden.

%Vor%

Funktioniert gut.

Gibt es eine Möglichkeit, die Groß- / Kleinschreibung des Werts zu berücksichtigen? Wie ABC, Abc, abc sollte jedes Match funktionieren. Vielen Dank im Voraus.

HINWEIS: Ich habe diese Frage gesehen - Spring 3.0 MVC Binding Enums Case Sensibel , aber in meinem Fall habe ich mehr als 10 enums / Werte (und erwarte mehr) Klassen und 10 verschiedene benutzerdefinierte Eigenschaftsordner zu implementieren wäre schmerzhaft, ich brauche eine generische Lösung.

    
Mikhail Kholodkov 22.02.2016, 23:10
quelle

3 Antworten

9
Die Funktionen

@Value und @ConfigurationProperties stimmen nicht überein. Ich konnte nicht genug betonen, wie @ConfigurationProperties besser ist.

Zuerst müssen Sie Ihre Konfiguration in einem einfachen POJO entwerfen, das Sie injizieren können, wo immer Sie wollen (anstatt Ausdrücke in Annotationen zu haben, die Sie leicht mit einem Tippfehler brechen können). Zweitens bedeutet die Metadaten-Unterstützung, dass Sie sehr leicht Holen Sie sich in Ihrer IDE automatisch Vervollständigung für Ihre eigenen Schlüssel .

Und schließlich gilt die im Dokument beschriebene entspannte Bindung nur für @ConfigurationProperties . @Value ist eine Spring Framework-Funktion und ist sich einer entspannten Bindung nicht bewusst. Wir beabsichtigen, dies im Dokument deutlicher zu machen .

TL; DR abc arbeitet mit @ConfigurationProperties , aber nicht mit @Value .

    
Stephane Nicoll 23.02.2016, 08:02
quelle
2

Bei den Werten wird zwischen Groß- und Kleinschreibung unterschieden (Sie können Schlüssel oder Kennwörter aus der Umgebung berücksichtigen), und die entspannte Bindung gilt nur für die Schlüssel. Bei Java-Enum-Namen wird ebenfalls zwischen Groß- und Kleinschreibung unterschieden ( A und a sind unterschiedliche Werte), und Sie möchten keine Groß- / Kleinschreibung unterdrücken.

Verwenden Sie einfach den richtigen Fall in Ihren Konfigurationseigenschaften.

    
chrylis 22.02.2016 23:29
quelle
-3

In einer praktischen Welt funktioniert das ....

%Vor%

.. obwohl das das Prinzip des Enums bricht!

    
jonny.l 30.08.2017 08:20
quelle