问题:报错框架问题
目的:只需要关键提示词;
e.message:Validation failed for argument [0] in com.victorlamp.hviot.common.pojo.CommonResult com.victorlamp.hviot.service.management.controller.thing.ThingController.createThing(com.victorlamp.hviot.service.management.controller.thing.vo.ThingCreateReqVO): [Field error in object 'thingCreateReqVO' on field 'name': rejected value [M]; codes [Size.thingCreateReqVO.name,Size.name,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [thingCreateReqVO.name,name]; arguments []; default message [name],32,2]; default message [设备名称长度为2-32个字符]]
修改代码如下:
- @ExceptionHandler(MethodArgumentNotValidException.class)
- public ResponseDTO exceptionHandler(MethodArgumentNotValidException e) {
- BindingResult bindingResult = e.getBindingResult();
- List
fieldErrors = bindingResult.getFieldErrors(); - String errorMessage = fieldErrors.stream()
- .findFirst()
- .map(FieldError::getDefaultMessage)
- .orElse("Invalid request");
- ResponseDTO result = ResponseDTO.fail(ExceptionTemplate.INVALID_REQUEST_COMMON, errorMessage);
- log.error("invalid request error", e);
- return result;
- }
MethodArgumentNotValidException 中的错误信息包含了字段验证错误的详细信息。具体地说,这些详细信息被包含在 BindingResult 对象中,而 BindingResult 对象包含一个 FieldError 对象的列表。每个 FieldError 对象表示一个字段验证错误,包含了验证失败的详细信息。
来看一下这些对象的结构:
MethodArgumentNotValidException:
BindingResult 对象,可以通过 getBindingResult() 方法获取。BindingResult:
BeanPropertyBindingResult。getFieldErrors() 方法可以获取一个 FieldError 对象的列表。FieldError:
getField(), getRejectedValue(), getCodes(), 和 getDefaultMessage() 等方法来获取详细信息。具体到你的例子中的异常信息,它的类型是 MethodArgumentNotValidException,其中包含了一个 BindingResult 对象,而 BindingResult 对象包含了一系列的 FieldError 对象,每个 FieldError 对象表示一个验证失败的字段及其详细信息。