介绍:
在Spring MVC中,我们可以通过几种方式设置HttpResponse的状态。 在本教程中,我们将使用@ResponseStatus批注实现它。
我们可以使用@ResponseStatus标记带有状态码和应返回原因的方法或异常类。 在调用标记的处理程序方法时或引发指定的异常时, HTTP状态将设置为使用@ResponseStatus批注定义的状态 。
使用方法:
默认情况下,我们的Spring Controller中的方法在成功执行时会返回HTTP Status 200(OK) 。
如果我们想从一个控制器方法中返回另一种类型的HttpStatus怎么办? 为此,我们可以使用@ResponseStatus对其进行标记 :
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public void storeEmployee(@RequestBody Employee employee) {...
}
(可选)我们可以使用此批注标记Controller类。 在这种情况下,响应代码配置将应用于所有请求处理程序方法。
我们还可以选择使用此批注来标记@ExceptionHandler和@ControllerAdvice bean中的方法。
请注意, 仅当标记的方法成功执行且没有引发任何异常时 , Spring才会使用@ResponseStatus 。
带
我们可以使用@ResponseStatus批注标记异常类:
@ReponseStatus(value = HttpStatus.FORBIDDEN, reason = "Employee isn't authorized")
public class EmployeeAccessDeniedException extends Exception {public EmployeeAccessDeniedException(String msg) {super(msg);}
}
当Spring捕获到这样的异常时,它将基于提供的设置抛出响应状态。 注意, 除非我们也用@ResponseStatus标记它们,否则Spring将对所有子类使用相同的状态配置。
在这里,我们还指定了例外原因 。
Spring将调用HttpServletResponse.sendError()方法时 :
- @ResponseStatus用于方法以及提供的原因 ,或者
- 在异常类上使用@ResponseStatus
使用sendError()方法意味着它会生成HTML错误页面并将其发送到客户端。 因此, 在REST Controller方法中 使用@ResponseStatus时 , 应避免提及原因 。
结论:
在本快速教程中,我们研究了如何在Spring MVC中设置HttpResponse的状态。 我们了解了@ResponseStatus与方法以及异常类的用法。
翻译自: https://www.javacodegeeks.com/2019/05/using-responsestatus-http-status-spring.html