Cómo responder con un error HTTP 400 en un método Spring MVC @ResponseBody que devuelve String
Estoy usando Spring MVC para una API JSON simple, con un @ResponseBody
enfoque basado como el siguiente. (Ya tengo una capa de servicio que produce JSON directamente).
@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;
}
En el escenario dado, ¿cuál es la forma más sencilla y limpia de dar una respuesta con un error HTTP 400?
Me encontré con enfoques como:
return new ResponseEntity(HttpStatus.BAD_REQUEST);
...pero no puedo usarlo aquí ya que el tipo de retorno de mi método es String, no ResponseEntity.
Aceptado
Cambie su tipo de devolución a ResponseEntity<>
y luego podrá usar lo siguiente para 400:
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
Y para una solicitud correcta:
return new ResponseEntity<>(json,HttpStatus.OK);
Después de Spring 4.1, existen métodos auxiliares en ResponseEntity que podrían usarse como:
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
y
return ResponseEntity.ok(json);
Algo como esto debería funcionar, pero no estoy seguro de si existe una forma más sencilla:
@RequestMapping(value = "/matches/{matchId}", produces = "application/json")
@ResponseBody
public String match(@PathVariable String matchId, @RequestBody String body,
HttpServletRequest request, HttpServletResponse response) {
String json = matchService.getMatchJson(matchId);
if (json == null) {
response.setStatus( HttpServletResponse.SC_BAD_REQUEST );
}
return json;
}