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
通过`@ExceptionHandler`标注的方法`handleException`,我们可以定义当发生异常时,如何处理异常并返回对应的视图。 具体到给出的内容: ```jsp jsp/error.jsp <%@taglib prefix="spring" uri="***"%> ${message}...
确保正确配置这些依赖,是构建一个能够正常处理异常的Spring MVC项目的基础。 在`src`目录下,可能包含了Java源代码、配置文件等。通常,异常处理相关的类会放在`com.example.yourpackage.controller.advice`这样的...
Spring MVC 提供了一种统一的方式来处理应用程序中抛出的异常。它通过`@ExceptionHandler`注解、`@ControllerAdvice`注解和`HandlerExceptionResolver`接口来实现这一目标,使得我们可以定制化错误页面,提供友好的...
11. **错误处理**:通过@ControllerAdvice和@ExceptionHandler,可以全局处理异常,提供统一的错误页面或API响应。 12. **整合WebSocket**:Spring MVC 4.0开始支持WebSocket协议,允许实现实时通信,如聊天应用、...
5. **异常处理**:Spring 2.0提供了@ControllerAdvice和@ExceptionHandler注解,使得全局异常处理更加简洁和高效。 接下来,Spring 2.5进一步扩展了这些特性,包括: 1. **@RequestMapping**:这是一个关键注解,...
本篇文章将详细探讨Spring MVC处理异常的三种主要方法:SimpleMappingExceptionResolver、自定义HandlerExceptionResolver以及@ExceptionHandler注解。 1. SimpleMappingExceptionResolver Spring MVC提供了内置的...
错误处理和异常处理也是Spring MVC中的重要部分,通过@ControllerAdvice和@ExceptionHandler可以全局处理异常,提供统一的错误页面。 最后,测试是任何应用程序开发的重要环节。Spring MVC提供了MockMVC,可以在不...
7. **错误和异常处理**:使用Spring的@ControllerAdvice和@ExceptionHandler注解可以全局处理错误和异常,提高用户体验。 通过这个集成例子,开发者可以学习到如何将这三个组件有效地整合在一起,创建一个功能完善...
- 可以通过@ControllerAdvice 和 @ExceptionHandler 注解进行全局异常处理,提高代码的健壮性。 11. **视图技术** - Spring MVC 兼容多种视图技术,如 JSP、Freemarker、Thymeleaf 等,可以根据项目需求选择合适...
- `@ControllerAdvice`:这是一个全局的异常处理注解,它可以跨越多个控制器,统一处理异常。 - `@ResponseStatus`:用于设置HTTP状态码,配合`@ExceptionHandler`一起使用,可以自定义错误响应的状态码。 - `...
SpringMVC 异常处理是 Spring MVC 框架中的一个重要机制,通过使用 @ExceptionHandler 注解和 @ControllerAdvice 注解,可以实现统一的异常处理机制。在实际开发中,需要根据不同的业务需求来设计和实现异常处理机制...
Spring MVC允许我们使用@ControllerAdvice和@ExceptionHandler注解定义全局的异常处理器。这样,任何Controller中抛出的异常都可以被统一捕获和处理。 6. **验证** 使用JSR-303/JSR-349提供的@NotNull、@Size等...
- 异常处理:通过@ControllerAdvice和@ExceptionHandler全局处理异常。 - 单元测试:使用JUnit和Mockito测试Controller、Service和DAO层的功能。 总之,《Spring MVC与MYBatis企业应用实战》将引导读者深入理解这...
Spring MVC 框架为我们提供了三种方式来处理异常,分别是实现 HandlerExceptionResolver、使用 @ControllerAdvice 和 @ExceptionHandler 注解、使用 ErrorController。下面我们将详细介绍这三种方式。 1. 实现 ...
Spring MVC提供了一种优雅的异常处理机制,可以使用@ControllerAdvice和@ExceptionHandler注解定义全局异常处理器。此外,还可以自定义错误页面,提高用户体验。 8. **数据绑定和验证** Spring MVC支持自动的数据...
可以使用@ControllerAdvice和@ExceptionHandler全局处理异常,为整个应用提供统一的错误页面或提示。 8. **拦截器(Interceptor)** 拦截器允许在请求处理前后执行自定义逻辑,比如登录检查、日志记录等。通过...
13. **异常处理**:通过@ControllerAdvice和@ExceptionHandler注解,可以全局处理异常,提供统一的错误页面。 14. **RESTful风格**:Spring MVC支持创建RESTful API,通过HTTP方法(GET、POST、PUT、DELETE等)和...
6. **异常处理**:通过@ControllerAdvice和@ExceptionHandler注解实现全局异常处理。 7. **拦截器**:自定义Interceptor,实现请求前后的预处理和后处理,如权限控制、日志记录等。 8. **RESTful支持**:通过@...
13. **异常处理**: 通过@ControllerAdvice和@ExceptionHandler,可以全局捕获并处理应用程序中的异常,提供统一的错误页面或JSON响应。 14. **Internationalization (i18n) & Localization (l10n)**: Spring MVC ...