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