kotlin Daten-Klasse + bean validation jsr 303
Ich versuche, Kotlin arbeiten mit jsr 303 Validierung im spring-data-rest Projekt.
Angesichts der folgenden Daten Klasse declarartion :
@Entity data class User(
@Id
@GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
var id: Long? = null,
@Size(min=5, max=15)
val name: String
)
Die @Size-annotation hat keine Wirkung, hier, so dass ich in der Lage zu speichern, die ein Benutzer mit einem Namen von 1 Zeichen.
Es funktioniert gut, wenn die Ausführung der sehr gleiche Beispiel, aber in einer Java-Klasse statt Kotlin.
Das macht mich denken Sie an eine Kotlin problem.
Vielen Dank im Voraus für Euch Hilfe!!!
- was sollte das Ziel der annotation? Konstruktor-parameter oder Feld?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie Anmerkung verwenden-Website-Ziele da der Standard für eine Eigenschaft deklariert im Konstruktor ist das Ziel der annotation auf der Konstruktor parameter statt der getter (die sehen sein wird, von JavaBeans-konformen hosts), wenn es mehrere Optionen zur Verfügung. Auch mit einem
data
Klasse ungeeignet sein könnte hier (siehe Hinweis am Ende).Den
property
Ziel aus den Kotlin docs Aussehen mag verlockend, aber es kann nur gesehen werden, von Kotlin und Java nicht. In der Regelget
funktioniert der trick, und es ist nicht erforderlich, auf die beanset
.Die Dokumente beschreiben den Prozess so:
Und die
@Size
Anmerkung:Daher seit
PARAMETER
ist ein gültiges Ziel, und mehrere Ziele verfügbar sind (parameter, Feld, Methode [get/set]) es wähltPARAMETER
ist nicht, was Sie wollen. Daher für eine JavaBean-host zu sehen, die Eigenschaft, die es Aussehen wird, für die get - (Eigenschaften sind definiert durch die "getter/setter" und nicht das Feld sichern).In einem der Java-Proben, es zeigt:
Entspricht unserer Nutzung von mit auf die get-Methode. Wenn es auf dem Spielfeld wie einige der Validierung Anmerkungen zeigen, sehen die
field
Einsatz-Ort Ziel. Oder, wenn das Feld muss auch öffentlich zugänglich sein, siehe die @JvmField annotation in Kotlin.HINWEIS: Wie bereits erwähnt in den Notizen von den anderen, Sie sollten wahrscheinlich betrachten Sie Sie NICHT mit einer
data
Klasse für Entitäten, die, wenn Sie verwenden, eine automatisch generierte ID, da es nicht vorhanden ist für neue Objekte das gleiche wie für die abgerufenen Objekte; und einedata
Klasse generiertequals
undhashCode
alle Felder-auch die, die es nicht sein sollte. Lesen Sie Anleitungen dazu aus dem Hibernate docs.@get:Size(min=5, max=15)
annotation.data class
für die Einheit sowieso. Der Grund ist - es generiertequals
undhashCode
Methoden mit allen Eigenschaften, einschließlichid
, die nicht gewünschte Verhalten für die JPA-Entität. Siehe hier: docs.jboss.org/hibernate/stable/core.old/reference/en/html/...