MethodArgumentNotValidException提取关键报错信息返回

问题:报错框架问题

目的:只需要关键提示词;

bash 复制代码
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个字符]]

修改代码如下:

java 复制代码
 @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 对象表示一个字段验证错误,包含了验证失败的详细信息。

来看一下这些对象的结构:

  1. MethodArgumentNotValidException

    • 该异常包含一个 BindingResult 对象,可以通过 getBindingResult() 方法获取。
  2. BindingResult

    • 这是一个接口,通常的实现类是 BeanPropertyBindingResult
    • 通过 getFieldErrors() 方法可以获取一个 FieldError 对象的列表。
  3. FieldError

    • 该对象包含了验证失败的详细信息,包括字段名、被拒绝的值、错误代码和默认错误消息等。
    • 你可以通过 getField(), getRejectedValue(), getCodes(), 和 getDefaultMessage() 等方法来获取详细信息。

具体到你的例子中的异常信息,它的类型是 MethodArgumentNotValidException,其中包含了一个 BindingResult 对象,而 BindingResult 对象包含了一系列的 FieldError 对象,每个 FieldError 对象表示一个验证失败的字段及其详细信息。

相关推荐
lhldsg8 分钟前
全民健身解决方案:从共享球场到智能运营的技术实践
java·大数据·开发语言·需求分析
vipxieliang11 分钟前
ValidX时间注解完全指南:10种时间验证注解详解
java·后端
雨辰AI28 分钟前
openGauss 生产运维避坑指南|适配信创项目改造核心难点
java·运维·后端
归去来?44 分钟前
Python 常用优雅写法
开发语言·python
名字还没想好☜1 小时前
Java 21 switch 模式匹配实战:sealed 接口 + record 替代 if-instanceof 链
java·人工智能·后端·python·spring
devilnumber1 小时前
Java 30 组高频技术 / 知识点多角度对比
java·开发语言
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 6 章 Spring Boot 最佳实践 阅读笔记 10
java·spring boot·笔记
何以解忧,唯有..1 小时前
Python 异常处理完全指南:从基础到高级实践
开发语言·前端·python
gugucoding1 小时前
57. 【Java】日志框架:SLF4J与Logback
java·开发语言·logback
今天的砖头有点烫手啊1 小时前
JVM 调优实战:从 GC 日志到参数优化,一次完整排查
java·jvm