2016-06-10 3 views
10

die folgende Abbildung Bedenken Sie:Java Spring - wie fehlende erforderliche Anforderung verarbeiten Parameter

@RequestMapping(value = "/superDuperPage", method = RequestMethod.GET) 
public String superDuperPage(@RequestParam(value = "someParameter", required = true) String parameter) 
{ 
    return "somePage"; 
} 

Ich möchte von nicht-required = false Ändern fehlenden Parameter Fall behandeln. Standardmäßig wird 400 Fehler zurückgegeben, aber ich möchte zurückgeben, sagen wir eine andere Seite. Wie erreiche ich das?

Antwort

20

Wenn eine erforderliche @RequestParam nicht in der Anforderung vorhanden ist, wird Spring eine MissingServletRequestParameterException Ausnahme werfen. Sie können ein @ExceptionHandler in demselben Controller oder in einem @ControllerAdvice definieren, die Ausnahme zu behandeln:

@ExceptionHandler(MissingServletRequestParameterException.class) 
public void handleMissingParams(MissingServletRequestParameterException ex) { 
    String name = ex.getParameterName(); 
    System.out.println(name + " parameter is missing"); 
    // Actual exception handling 
} 

Ich eine andere Seite sagen zurückkehren möchten lassen. Wie erreiche ich das?

Als Spring documentation Zustände:

ähnlich wie Standard-Controller-Methoden mit einer annotierten @RequestMapping Annotation, die Methodenargumente und Rückgabewerte von @ExceptionHandler Methoden können flexibel sein. Beispielsweise kann in Servlet-Umgebungen auf die HttpServletRequest und in Portlet-Umgebungen auf die PortletRequest zugegriffen werden. Die Art Rückkehr kann ein String, die als Ansichtsnamen interpretiert, ein ModelAndView Objekt, ein ResponseEntity, oder Sie können auch die @ResponseBody fügen Sie die Methode Rückgabewert mit Nachrichtenwandler umgewandelt haben und geschrieben der Antwortstream

+0

@Ali das hat perfekt funktioniert. Danke für Ihre Hilfe. Gibt es auch eine Möglichkeit zu wissen, welche Methode diese Ausnahme ausgelöst hat? Ich kann es nicht in 'printStack()' finden. – peech

+0

@peech Die Ausnahme kapselt nur die Informationen zum Param-Typ und zum Param-Namen ein. Also Nein, Sie können nicht wissen, welche Methode die Ausnahme auslöst. –

2

Sie können dies mit Frühling 4.1 ab und Java 8 durch den Typ Optional nutzen. In Ihrem Beispiel würde das bedeuten, dass Ihr @RequestParamString jetzt den Typ Optional<String> hat.

Take a look at this article für ein Beispiel zur Veranschaulichung dieser Funktion.

Verwandte Themen