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

新手上路,请多包涵

我正在将 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 的新手,基本问题是当事情正常或失败时我如何返回不同的状态码?

原文由 Marco 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
1 个回答

您可以使用几个选项。相当好的方法是使用异常和类来处理称为 @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) {
    // response committed...
    response.setStatus(HttpServletResponse.SC_ACCEPTED);
}

有关详细信息,请参阅这篇很棒的博客文章: Spring MVC 中的异常处理


笔记

在 Spring MVC 中使用 @ResponseBody 注释是多余的 - 它已经包含在 @RestController 注释中。

原文由 Jakub Kubrynski 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题