spring 封装了非常强大的异常处理机制。本文选取@ControllerAdvice + @ExceptionHandler 这种零配置(全注解),作为异常处理解决方案!
@ControllerAdvice,是spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强。让我们先看看@ControllerAdvice的实现:
1
2
3
4
5
|
@Target (value=TYPE)
@Retention (value=RUNTIME)
@Documented @Component public @interface ControllerAdvice
|
(spring 官方解释)
即把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法。非常简单,不过只有当使用@ExceptionHandler最有用,另外两个用处不大。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@ControllerAdvice public class ControllerExceptionHanler {
private static Logger logger = LoggerFactory.getLogger(ControllerExceptionHanler. class );
@ExceptionHandler (value=ApplicationRuntimeException. class )
public ResponseEntity<String> handleServiceException(Exception exception, HttpServletRequest request) {
return new ResponseEntity<String>(exception.getMessage(), HttpStatus.BAD_REQUEST);
}
@ExceptionHandler (value=Exception. class )
@ResponseStatus (value=HttpStatus.INTERNAL_SERVER_ERROR)
public ResponseEntity<String> handleException(Exception exception, HttpServletRequest request) {
logger.error( "系统异常!" , exception);
return new ResponseEntity<String>( "操作失败,请联系管理员!" , HttpStatus.INTERNAL_SERVER_ERROR);
}
} |
即把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法。非常简单,不过只有当使用@ExceptionHandler最有用,另外两个用处不大。
接下来看段代码:
- @ControllerAdvice
- public class ControllerAdviceTest {
- @ModelAttribute
- public User newUser() {
- System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前把返回值放入Model");
- return new User();
- }
- @InitBinder
- public void initBinder(WebDataBinder binder) {
- System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器");
- }
- @ExceptionHandler(UnauthenticatedException.class)
- @ResponseStatus(HttpStatus.UNAUTHORIZED)
- public String processUnauthenticatedException(NativeWebRequest request, UnauthenticatedException e) {
- System.out.println("===========应用到所有@RequestMapping注解的方法,在其抛出UnauthenticatedException异常时执行");
- return "viewName"; //返回一个逻辑视图名
- }
- }
这样可以全局的管理项目的异常现象,避免的错误信息直接显示到页面的尴尬。
参考:
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice.html
https://www.cnblogs.com/chihirotan/p/5990742.html
相关推荐
spring mvc统一处理异常,通过@ControllerAdvice+@ExceptionHandler
Spring Boot 提供了统一的异常处理机制,通过使用 @ControllerAdvice 和 @ExceptionHandler 注解,可以实现对控制器层、Service 层、Dao 层以及 Spring 系统内定义的部分异常的统一处理。 在 Spring Boot 中,可以...
例如,在Spring框架中,使用@ControllerAdvice和@ExceptionHandler注解可以定义全局异常处理类和方法。当应用程序中发生异常时,Spring会自动调用该方法来处理异常。这种方法适用于在全局范围内处理所有类型的异常。...
详细介绍了Spring Boot最常用的30个注解,包含概念、原理、示例 Spring Boot最常用的30个...六、 全局异常处理相关 1 @ControllerAdvice 2 @ExceptionHandler 七、 Spring Data JPA相关 1 @Entity 2 @Table 3 @Id ……
1.使用自定义错误页面处理异常案例 2.使用 @ExceptionHandler 注解处理异常案例 3.使用 @ControllerAdvice 注解处理异常案例 4.使用配置类处理异常案例 5.使用自定义类处理异常案例
在本系列文章的第一部分里,我们讨论了异常发生时,该返回给 REST API 调用者的异常表示(格式)的佳实践。 在本文(第二部分)中... HandlerExceptionResolvers 对于用一种统一的方法来处理异常来说非常的理想,
1 @ControllerAdvice 2 public class TstExceptionHandle{ 3 4 @ExceptionHandler(Exception.class) 5 public void myExceptionHandle(HttpServletResponse response){ 6 response.setStatus(403); 7 System....
spring_exceptionHandler Spring boot/Spring 统一错误处理方案的使用
通过@ControllerAdvice注解实现拦截器,利用@ExceptionHandler注解捕捉所有异常,进行统一处理 为提升查询效率,在蘑菇学名字段上建立了索引 基于卷积神经网络的蘑菇识别微信小程序+文档说明+数据集(高分项目).zip...
Spring MVC的常用注解 @Controller @RequestMapping @ResponseBody @RequestBody @PathVariable @RestController Spring MVC的基本配置 静态资源映射 拦截器配置 @ControllerAdivce ...
@ControllerAdvice @ResponseBody public class GlobalExceptionHandler { /** * 处理MyException异常 */ @ExceptionHandler(MyException.class) public ReturnJson myExceptionHandler(MyException ex) {...
Spring MVC和Spring WebFlux的问题 问题Spring Web是一组库,可轻松从Spring应用程序生成响应。 它填补了一个小众市场,它连接了和或从而使它们可以无缝地协同工作,而只需最少的开发人员工作。 在此过程中,它旨在...
- 通过@ControllerAdvice注解实现拦截器,利用@ExceptionHandler注解捕捉所有异常,进行统一处理 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通...
iOS异常捕捉提示,发送邮件及写入异常日志。 提供 断言, 错误的具体位置(类名及行数)、所有异常报告内容、及异常报告文件路径接口。 并统一展示 异常日志 。
iOS异常捕捉提示,发送邮件及写入异常日志。 提供 断言, 错误的具体位置(类名及行数)、所有异常报告内容、及异常报告文件路径接口。 并统一展示 异常日志 。
异常处理(ExceptionHandler) JMS消息处理机制 Mybatis与Spring的整合,并且 Junit Log4j SpringMVC整合页面所有操作,form,file,pic,input,radio,checkbox... ##遇到问题: Date类型丢失时分秒-->把date...
自定义错误处理首先,您将在此代码中找到一个使用@RestControllerAdvice和@ExceptionHandler方法将异常映射到Spring Boot中的状态代码的基本方法示例。 但是,最有趣的部分是注入自定义的ErrorController实现和重写...
ExceptionHandler:json格式的处理程序异常
Spring Boot中的异常处理(主要是管理Web API返回的状态码和描述) 定义Exceptin类发生异常时的行为 如果发生 OrderNotFoundException,将返回状态代码 404。 定义Controller类发生异常时的行为 在 ...
- 通过@ControllerAdvice注解实现拦截器,利用@ExceptionHandler注解捕捉所有异常,进行统一处理 - 为提升查询效率,在蘑菇学名字段上建立了索引 ## 1.1 总体设计 介绍了小程序的整体系统架构以及使用小程序进行...