问题:报错框架问题
目的:只需要关键提示词;
e.message:Validation failed for argument [0] in com.victorlamp.hviot.common.pojo.CommonResult<com.victorlamp.hviot.service.management.entity.thing.Thing> 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<FieldError> 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
对象表示一个验证失败的字段及其详细信息。