zoukankan      html  css  js  c++  java
  • 全局异常处理--page和json接口区分处理

    import com.alibaba.fastjson.JSON;
    import com.shsxt.crm.model.ResultInfo;
    import org.springframework.stereotype.Component;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.method.HandlerMethod;
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.lang.reflect.Method;
    
    /**
     * Created by lyf on 2019/7/15.
     */
    @Component
    public class GlobalExceptionResolver implements HandlerExceptionResolver {
        @Override
        public ModelAndView resolveException(HttpServletRequest request,
                                             HttpServletResponse response,
                                             Object target, Exception ex) {
    
            ModelAndView mv = createDefaultModelAndView(request, ex);
    
            /***
             * 区分: 普通page页面请求和json数据请求?
             * 通过@ResponseBody注解区分
             * */
    
            if(target instanceof HandlerMethod){
                System.out.println(target);
                HandlerMethod handlerMethod = (HandlerMethod) target;
                Method method = handlerMethod.getMethod();
                ResponseBody responseBody = method.getAnnotation(ResponseBody.class);
                if(null==responseBody){
                    if(ex instanceof ParamsException){
                        ParamsException e = (ParamsException) ex;
                        mv.setViewName("error");// 可以单独设置
                        mv.addObject("errorMsg", e.getMsg());
                    }
                }else{
                    ResultInfo info = new ResultInfo();
                    info.setCode(300);// 默认错误码
                    info.setMsg("系统繁忙");// 默认错误信息
    
                    if(ex instanceof ParamsException){
                        ParamsException e = (ParamsException) ex;
                        info.setCode(e.getCode());
                        info.setMsg(e.getMsg());
                    }
    
                    /**
                     * 响应JSON到前台
                     */
    
                    response.setCharacterEncoding("utf-8");
                    response.setContentType("application/json;charset=utf-8");
                    PrintWriter pw =null;
    
                    try {
                        pw = response.getWriter();
                        pw.write(JSON.toJSONString(info));
                        pw.flush();
                        pw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if(null!=pw){
                            pw.close();
                        }
                    }
                    return null;
                }
            }
            return mv;
        }
    
        private ModelAndView createDefaultModelAndView(HttpServletRequest request, Exception ex) {
            ModelAndView mv = new ModelAndView();
            mv.setViewName("error");
            mv.addObject("errorMsg", ex.getMessage());
            return mv;
        }
    }
    
  • 相关阅读:
    Dart中的类型转换总结:
    【Dart学习】--Dart之数组(List)的相关方法总结
    Navigator的使用:
    001——Angular环境搭建、运行项目、搭建项目
    Dart中的数据类型转换:
    Flutter中的Stack、Align、Positioned的使用
    Flutter设置图片为正方形
    顶部导航TabBar、TabBarView、DefaultTabController
    《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <二> NSMutableString
    Swift随记
  • 原文地址:https://www.cnblogs.com/linyufeng/p/13993061.html
Copyright © 2011-2022 走看看