2013-06-21 11 views
7

Come è possibile impostare in modo condizionato il codice di stato HTTP in un gestore di richieste MVC di Spring?Impostazione condizionale dello stato HTTP senza manipolazione diretta di HttpServletResponse

Ho un gestore di richieste che risponde alle richieste POST, per la creazione di una nuova risorsa. Se la richiesta è valida, desidero reindirizzare all'URI della nuova risorsa, restituendo un codice di stato HTTP 201 (creato). Se la richiesta non è valido lo voglio per dare all'utente la possibilità di correggere l'errore nel modulo inviato, e non dovrebbe dare un codice di stato di 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"; 
    } 

}

Ma che non riconoscono lo stato di risposta corretto per il caso di reindirizzamento.

Non posso semplicemente aggiungere uno @ResponseStatus, perché ci sono due stati possibili. Spero che ci sia un modo più ordinato di manually manipulating the HttpServletResponse. E voglio indicare il nome della vista da usare, quindi non posso have the request handler return a ResponseEntity object with the status set appropriately.

risposta

3

Nel caso in cui si desideri un codice di risposta 201, è possibile restituire un ResponseEntity con HttpStatus.CREATED quando la risorsa viene creata e il nome della vista in caso contrario. In tal caso, non è possibile utilizzare un reindirizzamento (http 301). Vedi RedirectView.

+0

"In tal caso, non è possibile utilizzare un reindirizzamento" Lo so. Questo è il punto della mia domanda – Raedwald

Problemi correlati