在 Spring 中,我们可以通过多种方式设置 HTTPResponse 的状态。在本教程中,我们将使用 Spring ResponseStatus 注解来实现这一点。
我们可以使用@ResponseStatus 注解来标记方法或异常类,并带有状态码和返回原因。在调用标记的处理程序方法或抛出指定的异常时,HTTP 状态将设置为使用 @ResponseStatus 注解定义的状态。
当该方法在 Spring 中成功执行时,Spring 提供了 HTTP 状态码 200(OK)响应。
如果我们想从我们的一个控制器方法返回另一种类型的 HttpStatus 怎么办?
如果我们想指定控制器方法的响应状态,我们需要使用 @ResponseStatus 注解对该方法进行注解。对于所需的响应类型,它有两个可互换的参数:代码和值。
例如 :
@RestController
@RequestMapping("/api")
public class EmployeeController {
@Autowired
private EmployeeRepository employeeRepository;
@PostMapping(value = "/employee")
@ResponseStatus(HttpStatus.CREATED)
public Employee createEmployee(@RequestBody Employee employee)
{
return employeeRepository.save(employee);
}
}
我们也可以指定响应状态的原因。如果我们想用原因发出错误消息或成功消息,那么我们可以如下使用它。 (使用原因值实现相同的代码)
@RestController
@RequestMapping("/api")
public class EmployeeController {
@Autowired
private EmployeeRepository employeeRepository;
@PostMapping(value = "/employee")
@ResponseStatus(value = HttpStatus.CREATED, reason = "Employee Created")
public Employee createEmployee(@RequestBody Employee employee)
{
return employeeRepository.save(employee);
}
}
请注意,当我们设置 reason 时,Spring 会调用 HttpServletResponse.sendError()。因此,它会向客户端发送一个HTML 错误页面,这使得它不适合 REST 端点。
另请注意,Spring 仅在 标记的方法成功完成时使用 @ResponseStatus(不抛出 Exception)。
或者,我们可以使用 @ReponseStatus 注解来注解 Controller 类。在这种情况下,配置的 ResponseStatus 将应用于所有请求处理程序方法。
我们可以将 @ResponseStatus 注解与错误处理程序一起使用,就像我们用于 Controller 方法一样。
@ControllerAdvice
public class CustomExceptionHandler extends RuntimeException{
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler(NullPointerException.class)
public void handleException(String message)
{
System.out.println(message);
}
}
当 Spring 捕获到这个异常时,它使用了 @ResponseBody 中提供的配置。
请注意,当我们用 @ResponseStatus 标记 Exception 类时,无论我们是否设置 reason,Spring 总是调用 HttpServletResponse.sendError()**,。
另请注意,Spring 对子类使用相同的配置,除非我们也用 @ResponseStatus 标记它们。
代码示例在 Github
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.dailycodebuffer.com/using-spring-responsestatus/
内容来源于网络,如有侵权,请联系作者删除!