【功能优化】全局:增加 methodArgumentNotValidExceptionExceptionHandler 对「组合校验」场景的兼容
This commit is contained in:
parent
8ccc55d1aa
commit
c95f0c152d
|
@ -1,5 +1,6 @@
|
||||||
package cn.iocoder.yudao.framework.web.core.handler;
|
package cn.iocoder.yudao.framework.web.core.handler;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.exceptions.ExceptionUtil;
|
import cn.hutool.core.exceptions.ExceptionUtil;
|
||||||
import cn.hutool.core.map.MapUtil;
|
import cn.hutool.core.map.MapUtil;
|
||||||
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.core.util.ObjUtil;
|
||||||
|
@ -27,6 +28,7 @@ import org.springframework.security.access.AccessDeniedException;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.validation.BindException;
|
import org.springframework.validation.BindException;
|
||||||
import org.springframework.validation.FieldError;
|
import org.springframework.validation.FieldError;
|
||||||
|
import org.springframework.validation.ObjectError;
|
||||||
import org.springframework.web.HttpRequestMethodNotSupportedException;
|
import org.springframework.web.HttpRequestMethodNotSupportedException;
|
||||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||||
import org.springframework.web.bind.MissingServletRequestParameterException;
|
import org.springframework.web.bind.MissingServletRequestParameterException;
|
||||||
|
@ -37,6 +39,7 @@ import org.springframework.web.servlet.NoHandlerFoundException;
|
||||||
import org.springframework.web.servlet.resource.NoResourceFoundException;
|
import org.springframework.web.servlet.resource.NoResourceFoundException;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -135,9 +138,23 @@ public class GlobalExceptionHandler {
|
||||||
@ExceptionHandler(MethodArgumentNotValidException.class)
|
@ExceptionHandler(MethodArgumentNotValidException.class)
|
||||||
public CommonResult<?> methodArgumentNotValidExceptionExceptionHandler(MethodArgumentNotValidException ex) {
|
public CommonResult<?> methodArgumentNotValidExceptionExceptionHandler(MethodArgumentNotValidException ex) {
|
||||||
log.warn("[methodArgumentNotValidExceptionExceptionHandler]", ex);
|
log.warn("[methodArgumentNotValidExceptionExceptionHandler]", ex);
|
||||||
|
// 获取 errorMessage
|
||||||
|
String errorMessage = null;
|
||||||
FieldError fieldError = ex.getBindingResult().getFieldError();
|
FieldError fieldError = ex.getBindingResult().getFieldError();
|
||||||
assert fieldError != null; // 断言,避免告警
|
if (fieldError == null) {
|
||||||
return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", fieldError.getDefaultMessage()));
|
// 组合校验,参考自 https://t.zsxq.com/3HVTx
|
||||||
|
List<ObjectError> allErrors = ex.getBindingResult().getAllErrors();
|
||||||
|
if (CollUtil.isNotEmpty(allErrors)) {
|
||||||
|
errorMessage = allErrors.get(0).getDefaultMessage();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
errorMessage = fieldError.getDefaultMessage();
|
||||||
|
}
|
||||||
|
// 转换 CommonResult
|
||||||
|
if (StrUtil.isEmpty(errorMessage)) {
|
||||||
|
return CommonResult.error(BAD_REQUEST);
|
||||||
|
}
|
||||||
|
return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", errorMessage));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue