Come rispondere con un errore HTTP 400 in un metodo Spring MVC @ResponseBody che restituisce String

2022-06-19 12:30:20

Sto utilizzando Spring MVC per una semplice API JSON, con un approccio basato su @ResponseBody come il seguente. (Ho già un livello di servizio che produce JSON direttamente.)

@RequestMapping(value = "/matches/{matchId}", produces = "application/json")
@ResponseBody
public String match(@PathVariable String matchId) {
    String json = matchService.getMatchJson(matchId);
    if (json == null) {
        // TODO: how to respond with e.g. 400 "bad request"?
    }
    return json;
}

Nello scenario indicato, qual è il modo più semplice e pulito per rispondere con un errore HTTP 400?

Mi sono imbattuto in approcci come:

return new ResponseEntity(HttpStatus.BAD_REQUEST);

... ma non posso usarlo qui poiché il tipo restituito del mio metodo è String, non ResponseEntity.

- Jonik

Source
Risposta


444
  • Cambia il tipo di reso in ResponseEntity<>, quindi puoi utilizzare quanto segue per 400:

    return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    

    E per una richiesta corretta:

    return new ResponseEntity<>(json,HttpStatus.OK);
    

    Dopo la primavera 4.1 ci sono metodi helper in ResponseEntity che potrebbero essere usati come:

    return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
    

    e

    return ResponseEntity.ok(json);