package com.llisoft.pay.config; import java.util.Objects; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.llisoft.common.constant.CodeEnum; import com.llisoft.common.vo.ResponseVo; /** * 框架级异常处理, 覆盖默认/error * 根据错误信息返回具体的json结果 * 模仿 org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController * @author YangJie [2018年12月27日] */ @RestController public class ErrorConfig implements ErrorController { private Logger logger = LoggerFactory.getLogger(ErrorConfig.class); @RequestMapping("/error") public ResponseVo error(HttpServletRequest request, HttpServletResponse response) { response.setStatus(200); // 状态码全部200 Object statusCode = request.getAttribute("javax.servlet.error.status_code"); if(Objects.nonNull(statusCode) && statusCode instanceof Integer) { int code = Integer.parseInt(statusCode.toString()); if(code == CodeEnum.C400.getCode()) { logger.error("/error: {}", CodeEnum.C400.getMsg()); return ResponseVo.build(CodeEnum.C400); }else if (code == CodeEnum.C401.getCode()) { logger.error("/error: {}", CodeEnum.C401.getMsg()); return ResponseVo.build(CodeEnum.C401); }else if (code == CodeEnum.C402.getCode()) { logger.error("/error: {}", CodeEnum.C402.getMsg()); return ResponseVo.build(CodeEnum.C402); }else if (code == CodeEnum.C403.getCode()) { logger.error("/error: {}", CodeEnum.C403.getMsg()); return ResponseVo.build(CodeEnum.C403); }else if (code == CodeEnum.C404.getCode()) { logger.error("/error: {}", CodeEnum.C404.getMsg()); return ResponseVo.build(CodeEnum.C404); } } logger.error("/error: {}", CodeEnum.C500.getMsg()); return ResponseVo.build(CodeEnum.C500); } @Override public String getErrorPath() { return "/error"; } }