|
|
@@ -26,6 +26,7 @@ import javax.validation.ConstraintViolation;
|
|
|
import javax.validation.ConstraintViolationException;
|
|
|
import java.io.IOException;
|
|
|
import java.text.MessageFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Set;
|
|
|
import java.util.concurrent.TimeoutException;
|
|
|
@@ -37,43 +38,42 @@ import java.util.concurrent.TimeoutException;
|
|
|
@Slf4j(topic = "risk-exception")
|
|
|
@RestControllerAdvice(annotations = RestController.class)
|
|
|
public class CustomerExceptionHandler implements HandlerExceptionResolver {
|
|
|
+
|
|
|
@ResponseBody
|
|
|
@ExceptionHandler(Exception.class)
|
|
|
- public Result<?> handleException(Exception ex) {
|
|
|
+ public Result<Void> handleException(Exception ex) {
|
|
|
//打印异常信息
|
|
|
- log.error("系统异常: {}", ex.getMessage(), ex);
|
|
|
+ log.error(StrUtil.format("系统异常: {}", ex.getMessage()), ex);
|
|
|
String msg = "查询超时,请稍后重试!";
|
|
|
// 根据异常类型返回不同的错误信息
|
|
|
if (ex instanceof NullPointerException) {
|
|
|
- return new Result(StatusCode.ERROR, msg);
|
|
|
+ return new Result<>(StatusCode.ERROR, msg);
|
|
|
} else if (ex instanceof TimeoutException) {
|
|
|
- return new Result(StatusCode.ERROR, msg);
|
|
|
+ return new Result<>(StatusCode.ERROR, msg);
|
|
|
}
|
|
|
return new Result<>(StatusCode.ERROR, msg);
|
|
|
}
|
|
|
|
|
|
@ResponseBody
|
|
|
@ExceptionHandler({ClientAbortException.class, IOException.class})
|
|
|
- public Result handleNetworkException(Exception ex) {
|
|
|
- if (ex instanceof ClientAbortException ||
|
|
|
- (ex instanceof IOException && "Broken pipe".equals(ex.getMessage()))) {
|
|
|
+ public Result<Void> handleNetworkException(Exception ex) {
|
|
|
+ if (ex instanceof ClientAbortException
|
|
|
+ || (ex instanceof IOException && "Broken pipe".equals(ex.getMessage()))) {
|
|
|
// 客户端断开连接,不需要完整记录堆栈,减少日志量
|
|
|
log.warn("客户端断开连接: {}", ex.getMessage());
|
|
|
- return new Result(StatusCode.ERROR, "网络开小差,请稍后重试!");
|
|
|
+ return new Result<>(StatusCode.ERROR, "网络开小差,请稍后重试!");
|
|
|
}
|
|
|
log.error("网络IO异常: {}", ex.getMessage());
|
|
|
- return new Result(StatusCode.ERROR, "网络开小差,请稍后重试!");
|
|
|
+ return new Result<>(StatusCode.ERROR, "网络开小差,请稍后重试!");
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 对象参数校验失败
|
|
|
- *
|
|
|
- * @param ex
|
|
|
- * @return
|
|
|
*/
|
|
|
@ResponseBody
|
|
|
@ExceptionHandler(MissingServletRequestParameterException.class)
|
|
|
- public Result<?> handleMissingServletRequestParameterException(Exception ex) {
|
|
|
- log.error("对象参数校验失败,异常信息为:e={}", ex);
|
|
|
+ public Result<Void> handleMissingServletRequestParameterException(Exception ex) {
|
|
|
+ log.error(StrUtil.format("对象参数校验失败,异常信息为:e={}", ex.getMessage()), ex);
|
|
|
String msg = MessageFormat.format("缺少参数{0}", ((MissingServletRequestParameterException) ex).getParameterName());
|
|
|
return new Result<>(StatusCode.MISSING_PARAMETER, msg);
|
|
|
}
|
|
|
@@ -81,70 +81,48 @@ public class CustomerExceptionHandler implements HandlerExceptionResolver {
|
|
|
/**
|
|
|
* 单个参数校验失败
|
|
|
*
|
|
|
- * @param ex
|
|
|
- * @return
|
|
|
*/
|
|
|
@ResponseBody
|
|
|
@ExceptionHandler(ConstraintViolationException.class)
|
|
|
- public Result handleConstraintViolationException(Exception ex) {
|
|
|
- log.error("单个参数校验失败,异常信息为:ex={}",ex);
|
|
|
+ public Result<Void> handleConstraintViolationException(Exception ex) {
|
|
|
+ log.error(StrUtil.format("单个参数校验失败,异常信息为:ex={}", ex.getMessage()), ex);
|
|
|
Set<ConstraintViolation<?>> sets = ((ConstraintViolationException) ex).getConstraintViolations();
|
|
|
if (!CollectionUtils.isEmpty(sets)) {
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- sets.forEach(error -> {
|
|
|
-// if (error instanceof FieldError) {
|
|
|
-// sb.append(((FieldError) error).getField()).append(":");
|
|
|
-// }
|
|
|
- sb.append(error.getMessage()).append(";");
|
|
|
- });
|
|
|
- String msg = sb.toString();
|
|
|
- msg = StrUtil.sub(msg, 0, msg.length() - 1);
|
|
|
- return new Result(StatusCode.PARAMETER_CHECK_ERR, msg);
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
+ sets.forEach(error -> list.add(error.getMessage()));
|
|
|
+ String msg = String.join(";", list);
|
|
|
+ return new Result<>(StatusCode.PARAMETER_CHECK_ERR, msg);
|
|
|
}
|
|
|
- return new Result(StatusCode.PARAMETER_CHECK_ERR, "参数校验失败");
|
|
|
+ return new Result<>(StatusCode.PARAMETER_CHECK_ERR, "参数校验失败");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 自定义校验异常信息捕获
|
|
|
+ * 方法参数传递非法或不适当 异常信息捕获
|
|
|
*
|
|
|
- * @param ex
|
|
|
- * @return
|
|
|
*/
|
|
|
@ResponseBody
|
|
|
@ExceptionHandler(IllegalArgumentException.class)
|
|
|
- public Result handleSpringCheckException(Exception ex) {
|
|
|
- log.error("自定义校验异常信息捕获,异常信息为:ex={}",ex);
|
|
|
+ public Result<Void> handleSpringCheckException(Exception ex) {
|
|
|
+ log.error(StrUtil.format("参数不合法,异常信息为:ex={}", ex.getMessage()), ex);
|
|
|
String msg = ex.getMessage();
|
|
|
- return new Result(StatusCode.PARAMETER_CHECK_ERR, msg);
|
|
|
+ return new Result<>(StatusCode.PARAMETER_CHECK_ERR, msg);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * POST 请求参数校验失败
|
|
|
- *
|
|
|
- * @param ex
|
|
|
- * @return
|
|
|
+ * POST 请求参数校验失败 异常捕获
|
|
|
*/
|
|
|
@ResponseBody
|
|
|
@ExceptionHandler(MethodArgumentNotValidException.class)
|
|
|
- public Result handleMethodArgumentNotValidException(Exception ex) {
|
|
|
- log.error(" 请求参数校验失败,异常信息为:ex={}",ex);
|
|
|
+ public Result<Void> handleMethodArgumentNotValidException(Exception ex) {
|
|
|
+ log.error(StrUtil.format("请求参数校验失败,异常信息为:ex={}", ex.getMessage()), ex);
|
|
|
List<ObjectError> errors = ((MethodArgumentNotValidException) ex).getBindingResult().getAllErrors();
|
|
|
String msg = getValidExceptionMsg(errors);
|
|
|
- return new Result(StatusCode.PARAMETER_CHECK_ERR, msg);
|
|
|
- }
|
|
|
-
|
|
|
- @ResponseBody
|
|
|
- @ExceptionHandler(ValidatedException.class)
|
|
|
- public Result handleValidatedException(Exception ex) {
|
|
|
- log.error(" 请求参数校验失败,异常信息为:ex={}", ex.getMessage());
|
|
|
- return new Result(StatusCode.BUSINESS_CERTIFICATE_TYPE_STATUS_ERROR, ex.getMessage());
|
|
|
+ return new Result<>(StatusCode.PARAMETER_CHECK_ERR, msg);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取属性校验异常信息
|
|
|
*
|
|
|
- * @param errors
|
|
|
- * @return
|
|
|
*/
|
|
|
private String getValidExceptionMsg(List<ObjectError> errors) {
|
|
|
if (!CollectionUtils.isEmpty(errors)) {
|
|
|
@@ -157,16 +135,24 @@ public class CustomerExceptionHandler implements HandlerExceptionResolver {
|
|
|
return "绑定异常";
|
|
|
}
|
|
|
|
|
|
+ @ResponseBody
|
|
|
+ @ExceptionHandler(ValidatedException.class)
|
|
|
+ public Result<Void> handleValidatedException(Exception ex) {
|
|
|
+ log.error("请求参数校验失败,异常信息为:ex={}", ex.getMessage());
|
|
|
+ return new Result<>(StatusCode.BUSINESS_CERTIFICATE_TYPE_STATUS_ERROR, ex.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
@ResponseBody
|
|
|
@ExceptionHandler(MaxUploadSizeExceededException.class)
|
|
|
public Result<?> handlerFileUploadException(MaxUploadSizeExceededException ex) {
|
|
|
- log.error("抛出异常信息,异常信息为:ex={}", ex.getMessage(), ex);
|
|
|
+ log.error(StrUtil.format("抛出异常信息,异常信息为:ex={}", ex.getMessage()), ex);
|
|
|
return new Result<>(StatusCode.ERROR, "文件超出限制(10MB)");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
|
|
|
- log.error(" 系统异常,异常信息为:e={}", e.getMessage(), e);
|
|
|
+ log.error(StrUtil.format("系统异常,异常信息为:e={}", e.getMessage()), e);
|
|
|
ModelAndView mv = new ModelAndView(new MappingJackson2JsonView());
|
|
|
if (e instanceof MultipartException) {
|
|
|
mv.addObject("message", "系统异常");
|
|
|
@@ -181,7 +167,7 @@ public class CustomerExceptionHandler implements HandlerExceptionResolver {
|
|
|
@ResponseBody
|
|
|
@ExceptionHandler(CustomerException.class)
|
|
|
public Result<?> handleCustomerException(Exception ex) {
|
|
|
- log.error("自定义校验异常信息捕获,异常信息为:ex={}", ex.getMessage(), ex);
|
|
|
+ log.error(StrUtil.format("自定义校验异常信息捕获,异常信息为:ex={}", ex.getMessage()), ex);
|
|
|
String msg = ex.getMessage();
|
|
|
return new Result<>(StatusCode.ACCESS_ERR, msg);
|
|
|
}
|