springMVC异常处理两种方式

简单异常处理器SimpleMappingExceptionResolver

SpringMVC已经定义好了处理器

   <!--配置简单映射异常处理器-->
   <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="defaultErrorView" value="error.jsp"/>
        <property name="exceptionMappings">
            <map>
                <entry key="com.zr.exception.MyException" value="error1.jsp"/>
                <entry key="java.lang.ClassCastException" value="error2.jsp"/>
            </map>
        </property>
    </bean>

自定义异常处理

自己定义一个类,实现HandlerExceptionResolver接口.在该类中,根据不同的异常,返回不同的信息和视图.


public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName(“error.jsp”);
if (ex instanceof ClassCastException) {
modelAndView.addObject(“info”, “类转换异常”);
} else if(ex instanceof MyException){
modelAndView.addObject(“info”, “自定义异常”);
}
return modelAndView;
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC中的异常处理器`@ExceptionHandler`只能处理Controller层抛出的异常,而无法捕捉到DAO或Service层抛出的异常。 如果需要在DAO或Service层捕捉到SQL异常,并统一处理,可以采用以下两种方式: 1. 利用AOP拦截异常 可以使用Spring AOP拦截DAO或Service层的方法,在方法执行时捕捉异常,并进行统一处理。例如: ```java @Aspect @Component public class ExceptionAspect { @Autowired private HttpServletResponse response; @Around("execution(* com.example.dao.*.*(..)) || execution(* com.example.service.*.*(..))") public Object handleException(ProceedingJoinPoint point) throws Throwable { try { return point.proceed(); } catch (SQLException e) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "SQL Exception"); } catch (Exception e) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unknown Exception"); } return null; } } ``` 2. 自定义异常并抛出 在DAO或Service层方法中捕捉到SQL异常后,可以将该异常包装成一个自定义异常,并抛出,然后在Controller层通过`@ExceptionHandler`捕捉到该自定义异常并进行统一处理。例如: ```java // DAO或Service层中的方法 public void save(User user) throws SQLException, CustomException { try { // 执行SQL操作 } catch (SQLException e) { throw new CustomException("SQL Exception", e); } } // Controller层中的方法 @PostMapping("/user") public void saveUser(@RequestBody User user) throws CustomException { userService.save(user); } @ExceptionHandler(CustomException.class) public void handleCustomException(HttpServletResponse response, CustomException e) throws IOException { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } ``` 通过以上两种方式,可以在DAO或Service层捕捉到SQL异常并进行统一处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值