2016-07-08 40 views
0

Ich arbeite an einer Spring-REST-Anwendung.
Diese Anwendung hat nur REST-Controller, keine Ansicht Teil.

ich wissen will, wie kann ich ein @RequestParam

Zum Beispiel
So überprüfen Sie die Anforderungsparameter im Spring REST-Controller

@RequestMapping(value = "", params = "from", method = RequestMethod.GET) 
    public List<MealReadingDTO> getAllMealReadingsAfter(@RequestParam(name = "from", required = true) Date fromDate) { 
...... 
...... 
} 

Im obigen Beispiel zu validieren, ist mein Ziel, die Date zu validieren. Angenommen jemand übergibt einen ungültigen Wert, dann sollte ich in der Lage sein, mit dieser Situation umzugehen.
Jetzt gibt es und Ausnahme mit 500 Status.

PS
Meine Frage ist nicht nur über Date Validierung.
Angenommen, es gibt einen boolean Parameter und jemand übergibt versehentlich tru anstelle von true, ich sollte in der Lage sein, diese Situation auch zu behandeln.

Vielen Dank im Voraus :)

+0

sieht aus wie Sie müssen eine benutzerdefinierte Validierung implementieren –

+0

@MarcoAcierno Wie kann ich das tun, können Sie mir einen Link oder etwas. Danke :) –

Antwort

3

Frühling wird mit einem 500 Statuscode fehlschlagen, weil sie den Wert nicht analysieren kann.

Die Stufen der Anforderungshandhabungs sind:

  1. Empfangsanforderung
  2. Endpunkt
  3. parse Anfrage params/Körperwerte und bindet sie an die detektierten Objekte
  4. Validate-Werte zu identifizieren, wenn @Validated
  5. verwendet wird
  6. Geben Sie den Methodenaufruf mit den richtigen Parametern ein

In Ihrem Fall schlägt der Fluss in der Phase parse (3) fehl.

Höchstwahrscheinlich erhalten Sie eine BindException. Sie können diese Fälle behandeln, indem Sie einen Ausnahme-Handler für Ihren Controller bereitstellen.

@ControllerAdvice 
public class ControllerExceptionHandler { 
    @ExceptionHandler(BindException.class) 
    @ResponseStatus(HttpStatus.BAD_REQUEST) 
    @ResponseBody 
    public YourErrorObject handleBindException(BindException e) { 
     // the details which field binding went wrong are in the 
     // exception object. 
     return yourCustomErrorData; 
    } 
} 

Andernfalls, wenn das Parsen nicht wie erwartet funktioniert (insbesondere ein hussle mit Date s), können Sie Ihre benutzerdefinierten Mapper/Serializer hinzuzufügen.

Höchstwahrscheinlich müssen Sie Jackson konfigurieren, da dieses Paket für das Serialisieren/Deserialisieren von Werten zuständig ist.

+0

Lass mich das versuchen, Danke :) –