In addition, we can just understand it as:
@RestControler= @Controller+@ResponseBody
@RestControllerAdvice= @ControllerAdvice+ @ResponseBody。
请记住,@RestControllerAdvice使用 RestfulApi 处理异常是更方便的注释。
示例操作系统用法:
@RestControllerAdvice
public class WebRestControllerAdvice {
@ExceptionHandler(CustomNotFoundException.class)
public ResponseMsg handleNotFoundException(CustomNotFoundException ex) {
ResponseMsg responseMsg = new ResponseMsg(ex.getMessage());
return responseMsg;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,任何异常 instanceOf CustomNotFoundException 都将在响应正文中抛出。
此处提取的示例:https : //grokonez.com/spring-framework/spring-mvc/use-restcontrolleradvice-new-features-spring-framework-4-3
异常:一个好的 REST API 应该正确处理异常并向用户发送正确的响应。不应向用户呈现任何未处理的异常。REST API 开发人员有两个与错误处理相关的要求。
@RestControllerAdvice是@ControllerAdvice和@ResponseBody的组合
@ControllerAdvice 注解在 Spring 3.2 中首次引入。
我们可以使用@ControllerAdvice注解来处理RESTful服务中的异常,但我们需要单独添加@ResponseBody。
注意:
GlobalExceptionHandler 使用 @ControllerAdvice 进行注释,因此它将拦截来自应用程序中控制器的异常。
@RestControllerAdvice 和 @ControllerAdvice 之间的区别是:
@RestControllerAdvice=@ControllerAdvice+@ResponseBody。- 我们可以在REST Web 服务中使用。
@ControllerAdvice- 我们可以在MVC和Rest Web服务中使用,如果我们在Rest Web服务中使用它,需要提供ResponseBody。
例如 :
异常类:
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends Exception{
private static final long serialVersionUID = 1L;
public ResourceNotFoundException(String message){
super(message);
}
}
Run Code Online (Sandbox Code Playgroud)
Rest Web Service 中上述异常的用法。
@RestControllerAdvice
public class MyRestControllerAdviceHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseMsg resourceNotFoundException(ResourceNotFoundException ex) {
ResponseMsg resMsg = new ResponseMsg(ex.getMessage());
return resMsg;
}
}
Run Code Online (Sandbox Code Playgroud)
MVC 中上述异常的用法。
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<?> resourceNotFoundException(ResourceNotFoundException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10239 次 |
| 最近记录: |