2017-05-30 6 views
0

Ich implementiere ein API-Gateway in Java, wo das Anfrageobjekt viele Felder und Unterobjekte hat. Es gibt zahlreiche Eigenschaften, die required (sollte nicht null sein) und einige, die optional sind.in Java, beste Möglichkeit, Objekte mit Eigenschaften zu validieren, die mit @NonNull versehen sind

Der Code läuft in Karaf und verwendet Blueprint, daher sind einige Spring-basierte Mechanismen möglich, aber wir verwenden momentan nicht viel von Spring (obwohl ich mit den verschiedenen Spring-Frameworks vertraut bin).

Ich bin mir der Annotation Eclipse @NonNull bewusst, und ich kann diese Annotation zu Getter-Methoden hinzufügen, die einen Nicht-Null-Wert zurückgeben müssen.

Was ich gerne tun könnte, ist eine wiederverwendbare Methode für das Request-Objekt, die feststellen wird, ob es Constraint-Verletzungen gibt und eine lesbare Fehlermeldung (oder etwas anderes) zurückgibt.

Es gibt verschiedene Möglichkeiten, dies zu tun, aber ich bin mir nicht sicher, welche Rahmenstrategie in meiner Situation sinnvoll ist. Zum Beispiel gibt es commons-validator, aber das scheint für Web-Formulare spezifisch zu sein. Ich habe auch eine Dokumentation für eine hibernate validator gesehen, aber das scheint hier nicht zu gelten.

+0

Die Annotation zusammen mit 'Objects.requireNonNull()' für jedes Argument in dem Anfang hinzufügen von die Methode. Wird mit einer NPE laut und schnell ausfallen, wenn die Voraussetzungen nicht erfüllt sind. –

+0

Entschuldigung, ich brauche mehr Informationen. –

+0

Können Sie Beispielcode teilen? –

Antwort

1

Sie können Orakel Validierung API JSR-303 verwenden, es ist ein unabhängiges Framework, das in Web-basierten und keine Web-basierten Anwendungen verwendet werden kann, bietet Hibernate die Implementierung für das JSR-303. können Sie die Abhängigkeiten enthalten, wie in Ihnen pom.xml Datei folgen

<dependency> 
    <groupId>javax.validation</groupId> 
    <artifactId>validation-api</artifactId> 
    <version>1.1.0.Final</version> 
</dependency> 

und die Umsetzung

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>5.2.1.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator-annotation-processor</artifactId> 
    <version>5.2.1.Final</version> 
</dependency> 

in Sie Bean-Objekt Sie Anmerkung wie @NotEmpty verwenden können, @NotNull, @Range .... auch können Sie jede Anmerkung konfigurieren wie Sie möchten, können Sie z. B. benutzerdefinierte Nachricht @NotNull Annotation wie

hinzufügen

zur Validierung arbeiten nur die Entität mit @Valid Anmerkungen versehen und einem anderen Parameter an der Controller-Methode des Typ BindingResult

@RequestMapping(value = "/addUser", method = RequestMethod.POST) 
public String addUser(@Valid User user, BindingResult result) { 

     if (result.hasErrors()) { 
      return "errorPage"; 
     } else { 
      return "Done"; 
     } 
    } 
+0

Ich benutze keine Bearbeitung von Federanfragen, aber das meiste gilt immer noch. –

Verwandte Themen