使用Spring @ResponseStatus设置HTTP状态代码
最后修改:2020年12月22日
1.介绍
在Spring MVC中,我们有很多方法设置HTTP响应的状态码。
在这个简短的教程中,我们将看到最直接的方法:使用@ResponseStatus注释。
2.在控制器方法
当端点成功返回时,Spring提供一个HTTP 200 (OK)响应。
如果我们想指定控制器方法的响应状态,我们可以用@ResponseStatus。对于期望的响应状态,它有两个可互换的参数:代码,和价值。例如,我们可以表示服务器拒绝煮咖啡,因为它是一个茶壶:
@ResponseStatus(HttpStatus.I_AM_A_TEAPOT) void teaPot() {}
当我们想要发出错误信号时,我们可以通过原因论点:
@ResponseStatus (HttpStatus。BAD_REQUEST, reason = "一些参数是无效的")void onIllegalArgumentException(IllegalArgumentException exception) {}
注意,当我们设置原因,春天HttpServletResponse.sendError ()。因此,它将发送一个HTML错误页面发送给客户端,这使得它不适合REST端点。
还要注意,Spring只用于@ResponseStatus,当标记的方法成功完成(没有抛出异常)。
3.与错误处理程序
我们有三种方法@ResponseStatus将一个异常到HTTP响应状态:
- 使用@ExceptionHandler
- 使用@ControllerAdvice
- 标志着异常类
为了使用前两个解决方案,我们必须定义一个错误处理程序方法。你可以阅读更多关于这个主题金宝搏官网188be这篇文章。
我们可以使用@ResponseStatus使用这些错误处理程序方法就像我们使用常规MVC方法一样在前一节中。
当我们不需要动态错误响应时,最直接的解决方案是第三种:用标记异常类@ResponseStatus:
@ResponseStatus(代码= HttpStatus.BAD_REQUEST)类CustomException扩展RuntimeException {}
当春天捕捉到这些异常,它使用我们提供的设置@ResponseStatus。
注意,当我们标记an异常类@ResponseStatus,春天总是在呼唤HttpServletResponse.sendError (),我们是否设置原因与否。
还要注意,Spring对子类使用相同的配置,除非我们用@ResponseStatus,太。
4.结论
在本文中,我们看到了如何使用@ResponseStatus设置不同场景下的HTTP响应代码,包括错误处理。
像往常一样,示例是可用的在GitHub。