@RestControllerAdvice@Slf4jpublic class GlobalExceptionHandler{ @ExceptionHandler(Throwable.class) @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) public String exceptionHandler(HttpServletRequest request, HttpServletResponse response, Exception ex) { log.error(ex.getMessage(), ex); return "服务器异常,请稍后重试"; } @ExceptionHandler(BusinessException.class) @ResponseStatus(value = HttpStatus.OK) public String businessExceptionHandler(HttpServletRequest request, HttpServletResponse response, Exception ex) { log.warn(ex.getMessage(), ex); return ex.getMessage(); } @ExceptionHandler(NamespaceExistException.class) @ResponseStatus(value = HttpStatus.BAD_REQUEST) public PlainResult<?> namespaceExistExceptionHandler(NamespaceExistException ex) { log.warn(ex.getMessage(), ex); return PlainResultUtil.buildFailureResult(NAMESPACE_UN_EXIT, ex.getNamespace()); }}
@Slf4j@ControllerAdvice("com.xxxx.admin.controller")public class WebExceptionHandler extends RequestBodyAdviceAdapter { @Autowired private RequestContext requestContext; @ExceptionHandler(IllegalValidateException.class) @ResponseBody public Object handleException(HttpServletRequest request, IllegalValidateException ex) { log.error("请求:{},参数: {}, 参数异常: ", request.getRequestURI(), getParam(request), ex); return Response.fail(HttpStatus.INTERNAL_SERVER_ERROR.value(), ex.getMessage()); } @ExceptionHandler(JuliaException.class) public Object handleMyException(HttpServletRequest request, JuliaException e) { log.error("请求:{},参数: {}, 参数异常: ", request.getRequestURI(), getParam(request), e); return Response.fail(e.getErrCode(), e.getErrMsg()); } @ExceptionHandler(Exception.class) public Object handleMyException(HttpServletRequest request, Exception e){ log.error("请求:{},参数: {}, 参数异常: ", request.getRequestURI(), getParam(request), e); return Response.fail(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage()); } private String getParam(HttpServletRequest request) { return requestContext.getParam() != null ? requestContext.getParam().toString() : getParamFromRequest(request); } private static String getParamFromRequest(HttpServletRequest request) { return request.getParameterMap().entrySet().stream().map(e -> String.format("%s=%s", e.getKey(), StringUtils.join(e.getValue()))).collect(Collectors.joining(";")); } @Override public boolean supports(MethodParameter methodParameter, Type targetType,Class<? extends HttpMessageConverter<?>> converterType) { return true; } @Override public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) { requestContext.setParam(body); return body; } @ManagedBean @RequestScope @Data public static class RequestContext { private Object param; }}
也可以采用更多的方式
https://www.cnblogs.com/littleatp/p/9496009.html