2013-06-21 10 views
7

W jaki sposób można wygodnie ustawić kod statusu HTTP w module obsługi zapytań Spring MVC?Warunkowe ustawianie statusu HTTP bez bezpośredniego manipulowania HttpServletResponse

Mam procedurę obsługi żądań, która odpowiada na żądania POST, w celu utworzenia nowego zasobu. Jeśli żądanie jest prawidłowe, chcę, aby przekierowało do identyfikatora URI nowego zasobu, zwracając kod statusu 201 (utworzony) HTTP. Jeżeli wniosek jest nieważny chcę aby dać użytkownikowi możliwość poprawiania błędów w złożonej formie i nie powinien dać kod statusu 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"; 
    } 

}

Ale to nie daje poprawny status odpowiedzi dla przypadku przekierowania.

Nie mogę po prostu dodać @ResponseStatus, ponieważ istnieją dwa możliwe statusy. Mam nadzieję, że istnieje lepszy sposób niż manually manipulating the HttpServletResponse. Chcę wskazać nazwę widoku, której używam, więc nie mogę have the request handler return a ResponseEntity object with the status set appropriately.

Odpowiedz

3

Jeśli potrzebujesz kodu odpowiedzi 201, możesz zwrócić ResponseEntity z HttpStatus.CREATED, gdy zasób zostanie utworzony, a nazwa widoku będzie inna. Jeśli tak, nie możesz użyć przekierowania (http kod 301). Zobacz RedirectView.

+0

"Jeśli tak, nie możesz użyć przekierowania" Wiem. To jest punkt mojego pytania – Raedwald

Powiązane problemy