1. @RestControllerAdvice
    2. @Slf4j
    3. public class GlobalExceptionHandler
    4. {
    5. @ExceptionHandler(Throwable.class)
    6. @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    7. public String exceptionHandler(HttpServletRequest request, HttpServletResponse response, Exception ex)
    8. {
    9. log.error(ex.getMessage(), ex);
    10. return "服务器异常,请稍后重试";
    11. }
    12. @ExceptionHandler(BusinessException.class)
    13. @ResponseStatus(value = HttpStatus.OK)
    14. public String businessExceptionHandler(HttpServletRequest request, HttpServletResponse response, Exception ex)
    15. {
    16. log.warn(ex.getMessage(), ex);
    17. return ex.getMessage();
    18. }
    19. @ExceptionHandler(NamespaceExistException.class)
    20. @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    21. public PlainResult<?> namespaceExistExceptionHandler(NamespaceExistException ex)
    22. {
    23. log.warn(ex.getMessage(), ex);
    24. return PlainResultUtil.buildFailureResult(NAMESPACE_UN_EXIT, ex.getNamespace());
    25. }
    26. }
    1. @Slf4j
    2. @ControllerAdvice("com.xxxx.admin.controller")
    3. public class WebExceptionHandler extends RequestBodyAdviceAdapter {
    4. @Autowired
    5. private RequestContext requestContext;
    6. @ExceptionHandler(IllegalValidateException.class)
    7. @ResponseBody
    8. public Object handleException(HttpServletRequest request, IllegalValidateException ex) {
    9. log.error("请求:{},参数: {}, 参数异常: ", request.getRequestURI(), getParam(request), ex);
    10. return Response.fail(HttpStatus.INTERNAL_SERVER_ERROR.value(), ex.getMessage());
    11. }
    12. @ExceptionHandler(JuliaException.class)
    13. public Object handleMyException(HttpServletRequest request, JuliaException e) {
    14. log.error("请求:{},参数: {}, 参数异常: ", request.getRequestURI(), getParam(request), e);
    15. return Response.fail(e.getErrCode(), e.getErrMsg());
    16. }
    17. @ExceptionHandler(Exception.class)
    18. public Object handleMyException(HttpServletRequest request, Exception e){
    19. log.error("请求:{},参数: {}, 参数异常: ", request.getRequestURI(), getParam(request), e);
    20. return Response.fail(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
    21. }
    22. private String getParam(HttpServletRequest request) {
    23. return requestContext.getParam() != null ? requestContext.getParam().toString() : getParamFromRequest(request);
    24. }
    25. private static String getParamFromRequest(HttpServletRequest request) {
    26. return request.getParameterMap().entrySet().stream().map(e -> String.format("%s=%s", e.getKey(), StringUtils.join(e.getValue()))).collect(Collectors.joining(";"));
    27. }
    28. @Override
    29. public boolean supports(MethodParameter methodParameter, Type targetType,Class<? extends HttpMessageConverter<?>> converterType) {
    30. return true;
    31. }
    32. @Override
    33. public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
    34. requestContext.setParam(body);
    35. return body;
    36. }
    37. @ManagedBean
    38. @RequestScope
    39. @Data
    40. public static class RequestContext {
    41. private Object param;
    42. }
    43. }

    也可以采用更多的方式
    https://www.cnblogs.com/littleatp/p/9496009.html