我将Spring Boot用于简单的REST API,如果出现故障,我想返回正确的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的新手,基本问题是当一切正常或失败时如何返回不同的状态代码?
您可以使用几个选项。很好的方法是使用异常和类进行处理@ControllerAdvice:
@ControllerAdvice
@ControllerAdvice class GlobalControllerExceptionHandler { @ResponseStatus(HttpStatus.CONFLICT) // 409 @ExceptionHandler(DataIntegrityViolationException.class) public void handleConflict() { // Nothing to do } }
您也可以传递HttpServletResponse给控制器方法,并设置响应代码:
HttpServletResponse
public RestModel create(@RequestBody String data, HttpServletResponse response) { // response committed... response.setStatus(HttpServletResponse.SC_ACCEPTED); }
有关详细信息,请参阅此出色的博客文章: Spring MVC中的异常处理
在Spring MVC中,使用@ResponseBody注释是多余的- 它已包含在@RestController注释中。
@ResponseBody
@RestController