Wie prüfe request-parameter ist nicht leere Zeichenfolge in @RequestMapping params?
In meinem controller habe ich die String-parameter, mit id, das sollte nicht null sein, der leere string. Ich Frage mich, gibt es irgendeine Möglichkeit zu überprüfen, es ist nicht leere Zeichenfolge in @RequestMapping params?
Ich habe versucht, es zu lösen in gewisser Weise
@RequestMapping(value = someURL, params = {"id"})
public SomeResponse doSomething(@RequestParam(required = true) String id)
@RequestMapping(value = someURL, params = {"!id="})
public SomeResponse doSomething(@RequestParam(required = true) String id)
@RequestMapping(value = someURL, params = {"!id=\"\""})
public SomeResponse doSomething(@RequestParam(required = true) String id)
ohne Erfolg.
So wie ich das verstehe, sind beide params = {"id"}
und @RequestParam(required = true)
können nur überprüfen, dass die parameter id
präsentiert Anfrage (!= null).
Ist es sehr wahrscheinlich, dass ich, um zu überprüfen, dass mit dem code im controller boby, wie
if (id == null || id.isEmpty()) {
return someErrorResponse;
}
aber bitte korrigieren Sie mich, wenn ich falsch.
Vielen Dank im Voraus.
P. S. meine app läuft auf Java 1.7 SE in Apache Tomcat 7.0.62 container
InformationsquelleAutor WeGa | 2015-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gemäß den Quellcode, der verbraucht, annotation
Etwas wie dies funktionieren sollte:
{"status":400,"error":"Bad Request","exception":"org.springframework.web.bind.ServletRequestBindingException","message":"Missing request header 'X-Custom-Header' for method parameter of type String","path":"/api/"}
Danke, ich denke, das ist, was ich brauche. Wenn ich annotation definiert die Weise, die Sie vorgeschlagen, setzen Haltepunkt am Anfang der controller-Methode ran und testen, den ich a)nicht in controller-Methode; b)habe selbst erklärte Ausnahme org.springframework.web.binden.UnsatisfiedServletRequestParameterexception: Parameter Bedingungen, "id!=" nicht erfüllt für die eigentliche Anfrage Parameter: id={}.
WeGa, wie hast du es behoben? Können Sie näher erläutern, bitte.
InformationsquelleAutor Sergio
Wenn Sie wollen, um Java-EE-konforme Validierungen verwenden
@Size(min=1)
.Hibernate Validator hat
@NotEmpty
Anmerkung für diesen Zweck. Aber das ist nicht Teil der Java-Spezifikation.BTW, halten
required=true
wie oben Benachrichtigungen, wäre nicht durchzusetzen Anwesenheit des param request.BEARBEITEN-Reaktion auf Kommentar:
Frühjahr ist die Java-EE-konforme Validierung, also @Größe annotation sollte funktionieren, wenn du einige Java-EE-Validierung-API implmentor auf Klasse Weg. Ich verwendet nur hibernate validator so weit. So aktivieren Sie diese Validierung Funktionen, indem diese in classpath:
als Sie beschriften können Sie Ihren controller mit
@Validated
annotation und tun Sie dies:Können Sie auch anpassen, Fehler-Nachricht wird gesendet an den client.
Wenn Sie nicht vertraut sind mit Java EE-Validierung, würde ich vorschlagen, zu Beginn der Suche in wie es ist super wichtig, wenn Sie sind erstellen von REST/HTTP-Endpunkt. Es öffnet eine neue Welt für Sie.
Starten mit Java-EE-Tutorial für die Validierung
Relevanten Teil des Frühlings doc
InformationsquelleAutor luboskrnac
Können Sie
defaultValue
wie inAber, auch hier müssen Sie die Verwendung der wenn-wie
Ansonsten können Sie einen filter erstellen, für diesen Zweck, wie in diesem Beispiel
Wie Sie ein servlet-filter in Java zu ändern servlet eine eingehende Anfrage-url?
Vielen Dank für die Antwort. Aber ist nicht mein Handbuch parameter Prüfung besser als deine Lösung?
Nicht nur "nicht sehr hilfreich", aber einfach falsch.
defaultValue
wird nur verwendet, wenn der parameter nicht angegeben, ist es nicht gerade die "leer" - Szenario.InformationsquelleAutor Obi Wan - PallavJha