介绍(了解)
在请求映射和控制器中抛出的异常会被HandlerExceptionResolver
(接口)组成的链来处理。当异常不被处理,和处于错误响应状态时,servelt容器会将结果渲染到错误页面中。详情见:Exceptions
@Controller
和@ControllerAdvice
类中,可以有一个@ExceptionHandler
异常处理方法。详情见:Exceptions
这是
HandlerExceptionResolver
实现类ExceptionHandlerExceptionResolver
提供的功能。
状态码(重点)
HandlerExceptionResolver
的实现类ResponseStatusExceptionResolver
提供了通过异常设置返回状态码的功能。
-
ResponseStatus
注解:注解到异常类或控制器方法上,返回响应时会设置为指定的状态码。下面给出注解到方法的例子:@PostMapping @ResponseStatus(HttpStatus.CREATED) public void add(@RequestBody Person person) { // ... }
用户添加成功后,会返回状态码为201的响应
-
ResponseStatusException
:抛出该异常,直接设置状态码,如:@GetMapping("/test4") public String test4(@RequestParam(value = "isTrue",defaultValue = "false") boolean isTure) { if(isTure){ throw new ResponseStatusException(HttpStatus.NOT_FOUND, "没找到呀",new IllegalAccessException("不正常啊")); } return "ok"; }
抛出异常时,状态码为404,异常的后两个参数会出现在响应消息体中。