spring - How to respond with HTTP 400 error in a Spring MVC @ResponseBody method returning String?
How to respond with HTTP 400 error in a Spring MVC @ResponseBody method returning String?
I'm using Spring MVC for a simple JSON API, with @ResponseBody
based approach like the following. (I already have a service layer producing JSON directly.)
@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;
}
Question is, in the given scenario, what is the simplest, cleanest way to respond with a HTTP 400 error?
I'm new to Spring MVC, and this turned out somewhat non-obvious... I did come across approaches like:
return new ResponseEntity(HttpStatus.BAD_REQUEST);
...but I can't use it here since my method's return type is String, not ResponseEntity.
Answers
change your return type to ResponseEntity<String>
, then you can use below for 400
return new ResponseEntity<String>(HttpStatus.BAD_REQUEST);
and for correct request
return new ResponseEntity<String>(json,HttpStatus.OK);
Something like this should work, I'm not sure whether or not there is a simpler way:
@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;
}
source - http://stackoverflow.com/questions/16232833/how-to-respond-with-http-400-error-in-a-spring-mvc-responsebody-method-returnin