Spring Boot Rest Controller如何返回不同的HTTP状态码?

我为一个简单的REST API使用Spring Boot,并希望在出现问题时返回正确的HTTP状态码。

@RequestMapping(value="/rawdata/", method = RequestMethod.PUT) @ResponseBody @ResponseStatus( HttpStatus.OK ) public RestModel create(@RequestBody String data) { // code ommitted.. // how do i return a correct status code if something fails? } 

作为Spring和Spring Boot的新手,基本的问题是,当某些事情是好的或者失败的时候,我如何返回不同的状态代码?

有几个选项可以使用。 相当好的方法是使用exception和类来处理称为@ControllerAdvice

 @ControllerAdvice class GlobalControllerExceptionHandler { @ResponseStatus(HttpStatus.CONFLICT) // 409 @ExceptionHandler(DataIntegrityViolationException.class) public void handleConflict() { // Nothing to do } } 

您也可以将HttpServletResponse传递给控制器​​方法,并设置响应代码:

 public RestModel create(@RequestBody String data, HttpServletResponse response) { // code ommitted.. response.setStatus(HttpServletResponse.SC_ACCEPTED); } 

详情请参阅博客文章: http : //spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

注意:在Spring Boot中使用@ResponseBody注解是多余的 – 它包含在@RestController