2013-06-21 11 views
7

Wie kann ich den HTTP-Statuscode bequem in einem Spring MVC-Request-Handler festlegen?Bedingte Einstellung des HTTP-Status ohne direkte Änderung der HttpServletResponse

Ich habe einen Request-Handler, der auf POST-Anfragen reagiert, um eine neue Ressource zu erstellen. Wenn die Anfrage gültig ist, möchte ich, dass sie zum URI der neuen Ressource umleitet und einen 201 (Created) HTTP-Statuscode zurückgibt. Wenn die Anforderung ungültig ist möchte ich es dem Benutzer die Möglichkeit geben, den Fehler in der vorgelegten Form zu korrigieren, und soll nicht den Statuscode 201.

@RequestMapping(value = { "/myURI/" }, method = RequestMethod.POST) 
public String processNewThingForm(
    @ModelAttribute(value = "name") final String name, 
    final BindingResult bindingResult) { 

    myValidator.validate(name, bindingResult); 

    if (!bindingResult.hasErrors()) { 
    getService().createThing(name); 
    return "redirect:" + name; 
    } else { 
    return "newThingView"; 
    } 

}

gebe aber das bedeutet nicht geben der richtige Antwortstatus für den Umleitungsfall.

Ich kann nicht einfach eine @ResponseStatus hinzufügen, weil es zwei mögliche Status gibt. Ich hoffe, es gibt einen besseren Weg als manually manipulating the HttpServletResponse. Und ich möchte den Namen der Ansicht angeben, damit ich nicht have the request handler return a ResponseEntity object with the status set appropriately verwenden kann.

Antwort

3

Wenn Sie einen Antwortcode 201 wünschen, können Sie ResponseEntity mit HttpStatus.CREATED zurückgeben, wenn die Ressource erstellt wird, und der Ansichtsname andernfalls. In diesem Fall können Sie keine Umleitung (http-Code 301) verwenden. Siehe RedirectView.

+0

"Wenn ja, können Sie eine Weiterleitung nicht verwenden" Ich weiß. Das ist der Punkt meiner Frage – Raedwald