springmvc中自定义异常处理器输出异常信息

xiaoxiao2021-02-28  74

1.可以使用springmvc提供的HandlerExceptionResolver,来实现统一的异常处理。

package com.catchu.utils; import com.alibaba.fastjson.JSON; import org.apache.shiro.authz.AuthorizationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 异常处理器 * @author 刘俊重 * @email magichair522@gmail.com */ @Component public class MagicExceptionHandler implements HandlerExceptionResolver { private Logger logger = LoggerFactory.getLogger(getClass()); @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { WebResult result = new WebResult(); try { response.setContentType("application/json;charset=utf-8"); response.setCharacterEncoding("utf-8"); if (ex instanceof CatchUException) { result.put("code", ((MagicException) ex).getCode()); result.put("msg", ((MagicException) ex).getMessage()); }else{ result = Out.error(); } //记录异常日志 logger.error(ex.getMessage(), ex); String json = JSON.toJSONString(result); response.getWriter().print(json); } catch (Exception e) { logger.error("CatchUExceptionHandler 异常处理失败", e); } return new ModelAndView(); } }

2.MagicException异常类定义如下:

package com.magic.lang; /** * @author 刘俊重 * @Description 自定义异常 */ public class MagicException extends RuntimeException { private String msg; private int code; public MagicException(String msg){ super(msg); this.msg = msg; } public MagicException(String msg,Throwable e){ super(msg,e); this.msg = msg; } public MagicException(String msg,int code){ super(msg); this.msg = msg; this.code = code; } public MagicException(String msg,int code,Throwable e){ super(msg,e); this.msg = msg; this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } }
转载请注明原文地址: https://www.6miu.com/read-26785.html

最新回复(0)