zoukankan      html  css  js  c++  java
  • Spring 全局异常拦截根据业务返回不同格式数据 自定义异常

    1.全局异常拦截:针对所有异常进行拦截 可根据请求自定义返回格式

    2.自定义异常类 处理不同业务的异常

    接下来开始入手代码:

    1).自定义异常类

    @ControllerAdvice//添加注解 记得开启spring的全局扫描
    public class BusinessException extends RuntimeException {
        private static final long serialVersionUID = 2332608236621015980L;
    
    
        private String code;
        public BusinessException(String code,String message) {
            super(message);
            this.code = code;
        }
    
        public BusinessException() {
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    }

    2).全局异常处理器(对拦截到的异常进行分类处理)

    /**
     * 全局异常处理器
     * @author chenhao
     */
    public class BusinessExceptionResolver implements HandlerExceptionResolver {
        /**日志log*/
        private static Logger log = LoggerFactory.getLogger(BusinessExceptionResolver.class);
    
        //系统抛出的异常
        @Override
        public ModelAndView resolveException(HttpServletRequest request,
                                             HttpServletResponse response, Object handler, Exception ex) {
            //handler就是处理器适配器要执行的Handler对象(只有method)
            //解析出异常类型。
            /*  使用response返回    */
            response.setStatus(HttpStatus.OK.value()); //设置状态码
            response.setContentType(MediaType.APPLICATION_JSON_VALUE); //设置ContentType
            response.setCharacterEncoding("UTF-8"); //避免乱码
            response.setHeader("Cache-Control", "no-cache, must-revalidate");
            //如果该 异常类型是系统 自定义的异常,直接取出异常信息。
            BusinessException businessException=null;
            try {
            //根据请求方式返回不同的格式(根据自己的业务需求实现,如果只返回一种格式的不用判断)
            //统一返回json 自定义了返回Result类 引入了Jackson
    if ("application/json".equals(request.getContentType())){ if(ex instanceof BusinessException){ businessException = (BusinessException)ex; //错误信息 log.error(ex.getMessage(),ex); response.getWriter().write(Result.error(businessException.getCode(),ex.getMessage()).toString()); }else { log.error(ex.getMessage(),ex); response.getWriter().write(Result.error("-1", ex.getMessage()).toString()); } }else {
              //统一返回xml格式 Message message
    = new Message(Constants.RESULT_FAIL); message.setScript(ex.toString()); response.setContentType("text/xml"); response.getWriter().write(XmlUtil.objectToString(message)); } } catch (IOException e) { log.error("与客户端通讯异常:"+ e.getMessage(), e); e.printStackTrace(); } ModelAndView modelAndView=new ModelAndView(); return modelAndView; } }

    3).Spring配置文件添加

    springMVC启动加载时会将所有的异常处理HandlerExceptionResolver实现类存放到handlerExceptionResolvers一个map结构中。

    <bean id="exceptionResolver" class="com.*.exception.BusinessExceptionResolver"></bean>

    4).使用方式(我这里只针对JSON)

    返回格式:

    json格式:

    {
    "success": false,
    "errorcode": "10",
    "errormsg": "特征值不能为空",
    "data": null
    }

    xml格式:

    <?xml version="1.0" encoding="UTF-8"?>
    <Message code="00001" script="java.lang.NullPointerException" rowCount=""/>

    目前知道的还可以定义很多异常来让框架简易。多学学总没错。

  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/AmbitiousMice/p/9054399.html
Copyright © 2011-2022 走看看