Spring MVC使用@ExceptionHandler注解异常处理

创建 BaseController 类,并在该类中使用 @ExceptionHandler 注解声明异常处理方法,具体代码如下:

  1. package controller;
  2. import java.sql.SQLException;
  3. import javax.servlet.http.HttpServletRequest;
  4. import org.springframework.web.bind.annotation.ExceptionHandler;
  5. import exception.MyException;
  6. public class BaseController {
  7. /** 基于@ExceptionHandler异常处理 */
  8. @ExceptionHandler
  9. public String exception(HttpServletRequest request, Exception ex) {
  10. request.setAttribute("ex", ex);
  11. // 根据不同错误转向不同页面,即异常与view的对应关系
  12. if (ex instanceof SQLException) {
  13. return "sql-error";
  14. } else if (ex instanceof MyException) {
  15. return "my-error";
  16. } else {
  17. return "error";
  18. }
  19. }
  20. }

将所有需要异常处理的 Controller 都继承 BaseController 类,示例代码如下:

  1. @Controller
  2. public class TestExceptionController extends BaseController{
  3. ...
  4. }

在使用 @ExceptionHandler 注解声明统一处理异常时不需要配置任何信息,此时将配置文件的代码修改如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring一beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context.xsd">
  10. <!-- 使用扫描机制扫描包 -->
  11. <context:component-scan base-package="controller" />
  12. <context:component-scan base-package="service" />
  13. <context:component-scan base-package="dao" />
  14. <!-- 配置视图解析器 -->
  15. <bean
  16. class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  17. id="internalResourceViewResolver">
  18. <!--前缀 -->
  19. <property name="prefix" value="/WEB-INF/jsp/" />
  20. <!-- 后缀 -->
  21. <property name="suffix" value=".jsp" />
  22. </bean>
  23. </beans>

发布 springMVCDemo10 应用到 Tomcat 服务器并启动服务器,然后即可通过地址“http://localhost:8080/springMVCDemo10/”测试应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当我们在编写 Spring MVC 应用程序时,我们可以使用 @ControllerAdvice 注解或者在 Controller 中使用 @ExceptionHandler 注解来处理异常。@ControllerAdvice 注解可以用于全局异常处理,而 @ExceptionHandler 注解则用于处理特定的异常。 下面是一个使用 @ControllerAdvice 注解处理异常的示例: ``` @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ModelAndView handleException(Exception e) { ModelAndView mav = new ModelAndView(); mav.addObject("exception", e); mav.setViewName("error"); return mav; } } ``` 在上面的示例中,我们定义了一个名为 GlobalExceptionHandler 的类,并使用 @ControllerAdvice 注解将其标记为全局异常处理器。我们还使用 @ExceptionHandler 注解来处理 Exception 类型的异常。当应用程序中出现 Exception 类型的异常时,Spring MVC 将会调用 handleException 方法来处理该异常,并返回一个包含异常信息的 ModelAndView 对象。 如果我们想要在 Controller 中处理特定的异常,我们可以使用 @ExceptionHandler 注解。下面是一个使用 @ExceptionHandler 注解处理特定异常的示例: ``` @Controller public class UserController { @ExceptionHandler(UserNotFoundException.class) public ModelAndView handleUserNotFoundException(UserNotFoundException e) { ModelAndView mav = new ModelAndView(); mav.addObject("exception", e); mav.setViewName("userNotFound"); return mav; } @GetMapping("/users/{id}") public String getUser(@PathVariable Long id) { User user = userService.getUserById(id); if (user == null) { throw new UserNotFoundException("User not found with id " + id); } return "userDetails"; } } ``` 在上面的示例中,我们定义了一个名为 UserController 的类,并使用 @Controller 注解将其标记为一个 Controller。我们还使用 @ExceptionHandler 注解来处理 UserNotFoundException 类型的异常。当应用程序中出现 UserNotFoundException 类型的异常时,Spring MVC 将会调用 handleUserNotFoundException 方法来处理该异常,并返回一个包含异常信息的 ModelAndView 对象。 另外,我们还定义了一个名为 getUser 的方法来获取用户信息。如果用户不存在,我们将会抛出一个 UserNotFoundException 异常,该异常将会被 handleUserNotFoundException 方法处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧浩海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值