spring mvc 全局异常

本文介绍如何在Spring MVC中配置控制器包扫描,并通过自定义异常解析器来处理客户端请求时可能出现的异常,确保异常信息不会直接暴露给客户端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

客户端请求controller,为了不让异常返回到客户端,需把controller层的异常拦截掉,对异常进行包装然后再返回到客户端。

图解:


dispatcher-servlet.xml里单独配置controller的包扫描,dispatcher-servlet.xml里的包扫描是springmvc的包扫描。所以要单独把controller的包单独抽出来放在这。扫描controller注解。把@Controller加到类上,它就变成了一个ctroller。这里只扫描controller,所以把spring的默认扫描关闭: use-default-filters="false"。即默认扫描不扫了,但一定会扫include里的包:

    <context:component-scan base-package="cn.it.controller" annotation-config="true" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

可以自己加运行时异常进行测试:
int a = 0;
int b = 66 / a;
这个就是运行时异常,只有在运行时才会报出来。

在common包里建工具类ExceptionResolver 并加component注解就好了:
@Slf4j
@Component
public class ExceptionResolver implements HandlerExceptionResolver{
public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,
Exception arg3) {
log.error("{} exception", arg0.getRequestURI(),arg3);//这一行要写,不然在服务端也看不到异常信息了。
ModelAndView modelAndView = new ModelAndView(new MappingJacksonJsonView());//当使用jackson2.x时使用MappingJackson2JsonView,这里使用的是1.9
        modelAndView.addObject("status", ResponseCode.ERROR.getCode());
        modelAndView.addObject("msg", "接口异常,详情请查看日志中的异常信息");
        modelAndView.addObject("data",arg3.toString());
        return modelAndView;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值