@RestControllerAdvice
@Slf4j
public 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