package com.zy.common.config; import com.core.common.R; import com.core.exception.CoolException; import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.method.HandlerMethod; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; /** * Created by vincent on 2019-06-09 */ @RestControllerAdvice public class CoolExceptionHandler { @ExceptionHandler(Exception.class) public Object handlerException(HandlerMethod handler, Exception e, HttpServletRequest request) { e.printStackTrace(); if (useAlt(request)) { return altError("500", "服务器内部错误"); } return R.error(); } @ExceptionHandler(HttpRequestMethodNotSupportedException.class) public Object handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e, HttpServletRequest request) { if (useAlt(request)) { return altError("405", "HTTP方法不支持"); } return R.error(); } @ExceptionHandler(CoolException.class) public Object handleRRException(CoolException e, HttpServletRequest request) { if (useAlt(request)) { String[] split = e.getMessage().split("-"); String code = null; String msg = e.getMessage(); if (split.length == 2 && String.valueOf(split[0]).length() < 3) { code = split[0]; msg = split[1]; } return altError(code, msg); } String[] split = e.getMessage().split("-"); if (split.length == 2) { if (String.valueOf(split[0]).length() < 3) { return R.parse(e.getMessage()); } } return R.error(e.getMessage()); } private boolean useAlt(HttpServletRequest request) { if (null == request) { return false; } String header = request.getHeader("X-Response-Format"); if ("alt".equalsIgnoreCase(header)) { return true; } String param = request.getParameter("responseFormat"); return "alt".equalsIgnoreCase(param); } private Map altError(String code, String message) { Map map = new HashMap<>(); map.put("success", false); if (null != code) { map.put("code", code); } else { map.put("code", "200"); } map.put("message", "失败"); map.put("returnMessage", message); map.put("timestamp", System.currentTimeMillis()); return map; } }