Praktische Validierung der JAXB-Daten mit JAX-RS?
Verwenden wir JAX-RS mit einige Recht einfache POJO-Einheiten und haben eine Reihe von @GET
und @POST
annotierte Methoden, die @Produce
und @Consume
MediaType.APPLICATION_JSON
, MediaType.APPLICATION_XML
. Nichts spektakuläres.
Frage die ich habe ist, wie am besten sollte ich überprüfen Sie die Daten kommen?
Haben wir nicht die XML-Schema-obwohl, ich könnte erzeugen einer. Ich brauchen würde, um Haken das irgendwie, die sieht nicht furchtbar Ansprechend und ich habe nicht gefunden, ein prägnantes Beispiel noch.
Könnten wir das "bean validation" aber ich bin wieder unsicher, wie ich vielleicht Haken Sie diese und rufen Sie die Vervollständigung auf.
Schließlich (glaube ich) wir könnten zum Beispiel fügen Sie einige isValidForXXX()
Methoden der entity-POJOs und rufen Sie, wenn wir eine Instanz haben, die uns anvertraut.
Empfehlungen anyone?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie ein XML-schema haben, dann könnten Sie nutzen JAXB-Validierung innerhalb eines
MessageBodyReader
. Für ein konkretes Beispiel siehe meine Antwort auf eine ähnliche Frage stellen.ValidatingReader
Unten ist ein bare bones Umsetzung von
MessageBodyReader
das bedeutet vier Dinge: 1)Create a JAXBContext
, 2) Erstellen Sie eine Instanz derSchema
, 3) Setzt das schema auf derUnmarshaller
4) Unmarshals dieInputStream
.War auf der Suche um das gleiche erreichen, wie der original-poster. Da schien es eine Lust zu vermeiden
MessageBodyReader
ich dachte, ich würde teilen, diese Lösung, die nur verwendet dieHttpServletRequest
als parameter und verwendet dann diegetInputStream
Methode, um direkt mit den Daten arbeiten.Den
handleCustomerInteractionRequest
Methode würde dann mit der servlet-stream und validieren der XML -Mit einem MessageBodyReader die hervorragende @Blaise Doughan schlägt vor, gibt Ihnen viel Flexibilität.
Offensichtlich, wenn Sie hatte Sie @Consumes-Annotation und Ihre JAXB-annotierte Klasse schon, ich kann sehen, wie das aussieht ausführlich.
Es ist wirklich bis zu Ihrem Komfort-Ebene. Ich beachten Sie, dass Sie nicht definieren ein XML-schema, so dass Sie die JAXB-Klassen von hand, und es scheint logisch zu code die Validierungslogik in die gleichen Klassen (oder eine externe benutzerdefinierte validator).
Würde ich persönlich sehe das schreiben, dass XML-Schema, vor allem, wenn die Validierungsregeln sind einfach, ausgedrückt. Es könnte eine gute Investition für Ihr Projekt: Sie können das generieren der JAXB-Klassen automatisch aus dann auf, und Holen Sie sich die Validierung automatisch, so dass Sie sollte haben eine bessere Wartbarkeit für die Zukunft.