Springboot 异常返回值统一处理
Spring boot 处理 error 的基本流程:
Controller -> 发生错误 -> BasicErrorController -> 根据 @RequestMapping(produces) 判断调用 errorHtml 或者 error 方法
然后:
errorHtml -> getErrorAttributes -> ErrorViewResolver -> 错误显示页面
error -> getErrorAttributes -> @ResponseBody (直接返回JSON)。
当Zuul出现异常时,统一处理返回值,替换Springboot默认返回值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package com.hzcf.getway.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.web.ErrorController; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.hzcf.base.misc.ConstantLogInfo; import com.hzcf.base.result.ResponseCode; import com.hzcf.base.result.ResponseData; import com.hzcf.security.util.IPUtils; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; /** * Create by hanlin on 2018年6月5日 **/ @RestController public class ErrorHandlerController implements ErrorController { private Logger logger = LoggerFactory.getLogger(this.getClass()); /** * 出异常后进入该方法,交由下面的方法处理 */ @Override public String getErrorPath() { return "/error"; } @RequestMapping("/error") public Object error(HttpServletRequest request, HttpServletResponse response){ // RequestContext ctx = RequestContext.getCurrentContext(); ZuulException exception = (ZuulException)ctx.getThrowable(); logger.debug(ConstantLogInfo.ZUUL_ROUTER_ERROR,exception.getCause(),exception.errorCause,IPUtils.getIpAddress(request)); Integer status = (Integer)request.getAttribute("javax.servlet.error.status_code"); return ResponseData.fail(ResponseCode.codeOf(status)).toString(); } } |
©版权声明:本文为【翰林小院】(huhanlin.com)原创文章,转载时请注明出处!
发表评论