spring @ControllerAdvice注解

这篇博客介绍了Spring MVC中使用@ControllerAdvice进行全局配置,包括@ExceptionHandler处理异常、@ModelAttribute绑定数据和@DataBinder注册参数转换器。通过ExceptionAdvice类展示了如何优雅地处理普通请求和异步请求的异常,确保日志记录并返回合适的响应。测试验证了配置的有效性。
摘要由CSDN通过智能技术生成

@ControllerAdvice
用于修饰类,表示该Controller是全局的配置类。
在此类中可以对Controller进行三种全局配置:异常处理方案、绑定数据方案、绑定参数方案。分别对应三种注解
@ExceptionHandler
用于修饰方法,该方法会在controller出现异常后被调用,用于处理捕获到的异常
@ModelAttribute
用于修饰方法,该方法会在controller方法执行前被调用,用于为Model对象绑定参数
绑定数据是指controller有很多请求,都用到同一个数据给模板,即需要往model里装同一个数据,可以利用该注解加上一个方法给model统一绑定参数
@DataBinder
用于修饰方法,该方法会在controller方法执行前被调用,用于绑定参数的转换器
页面向服务器传参时,会被自动的做转换,例如传page时自动转换成page对象,是因为Spring底层内置了很多参数转换器,自动进行判断调用,当出现全新的类型时,则可以自定义参数转换器,用该注解进行注册

 public String getLetterList(Model model, Page page){
 }

package com.nowcoder.community.controller;
 @RequestMapping(path = "/error",method = RequestMethod.GET)
    public String getErrorPage(){
        return "/error/500";
    }

package com.nowcoder.community.controller.advice;
@ControllerAdvice(annotations = Controller.class)
public class ExceptionAdvice {
    private static final Logger logger= LoggerFactory.getLogger(ExceptionAdvice.class);

    @ExceptionHandler(Exception.class)
    public void handlerException(Exception e, HttpServletRequest request, HttpServletResponse response) throws IOException {
        //参数可设置多个,看文档,以上三个参数基本可以包括大多数问题

        //将异常记录到日志里
        logger.error("服务器发生异常"+e.getMessage());//对异常的概况
        //详细信息
        for (StackTraceElement element: e.getStackTrace()){
            logger.error(element.toString());
        }
        //对于普通请求和异步请求分开处理
        //普通请求返回的是页面,可以重定向到错误页面,但异步请求返回的是JSON数据
        String xRequestedWith= request.getHeader("x-requested-with");
        if("XMLHttpRequest".equals(xRequestedWith)){ //说明是异步请求
            response.setContentType("application/plain;charset=utf-8");
            PrintWriter writer=response.getWriter();
            writer.write(CommunityUtil.getJOSNString(1,"服务器异常"));
        }else { //普通请求
            response.sendRedirect(request.getContextPath()+"/error");
        }
    }
}

测试:分别在普通请求和异步请求中人为添加错误,访问触发该请求的对应页面,报错且控制台有日志

该文章内容来自牛客网java项目课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值