ich das folgende Feld mit @Value
kommentiert haben, einen Standardwert festgelegt wird:Frühling @Value Anmerkung min max int erzwingen
@Value("${tolerance.percentage:25}")
private int tolerance;
Dieser Code richtig initialisiert wird, den Wert des Feldes an die Systemeigenschaft „tolerance.percentage“ wenn diese Stütze existiert. Wenn es nicht existiert, ist es standardmäßig 25.
Ich möchte jedoch einen Schritt weiter gehen, indem ich ein Minimum und Maximum für dieses int-Feld erzwinge, da es einen Prozentsatz von weniger als 100 als ganze Zahl darstellt, und Murphys Gesetz bedeutet, dass jemand (wahrscheinlich ich) die Eigenschaft extern falsch konfigurieren kann und meine App zur Laufzeit merkwürdige Dinge tun würde, was für meinen Geschmack viel zu spät ist. Ich möchte, dass ein Fehler ausgelöst wird, wenn die Eigenschaft beim Start der Anwendung auf "101" oder "-1" gesetzt wird. Verdammt, ich möchte sogar, dass ein Fehler ausgelöst wird, wenn ich versuche, ihn in der @Value
Annotation auf 101 zu setzen, aber das ist für die Zwecke dieser Frage nicht wichtig. Hier ist, was ich versucht:
//@Min and @Max don't produce the intended behavior when combined with @Value
@Min(0)
@Max(100)
@Value("${tolerance.percentage:25}")
private int tolerance;
Kann ich eine min und max auf einem int
Feld erzwingen, dass @Value
ist sich dessen bewusst?
'@ Value' den Wert beim Start-up-Zeit injiziert (für Singletons, nicht sicher, ob Sie die Bohne haben wie. 'prototype'); Ich glaube nicht, dass die Bean-Validierung zu diesem Zeitpunkt (automatisch) ausgelöst wird ... –
Die Validierung wird nur in' @ConfigurationProperties'-Klassen, nicht in regulären Klassen, durchgeführt. Wenn Sie diese Werte validieren wollen Fügen Sie eine '@ PostConstruct' Methode hinzu, um den Bereich zu überprüfen oder injizieren Sie sie in den Konstruktor und führen Sie dort die Validierung durch. –
@M.Deinum Das Hinzufügen von '@ ConfigurationProperties' zu meinem Pojo funktionierte. Nach dem Hinzufügen begannen die Annotationen als Ich dachte, sie würden das. Wenn Sie Ihren Kommentar formalisieren in eine Antwort werde ich es akzeptieren. – JellyRaptor