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 对象表示一个验证失败的字段及其详细信息。

相关推荐
sg_knight3 小时前
Spring 框架中的 SseEmitter 使用详解
java·spring boot·后端·spring·spring cloud·sse·sseemitter
郑州光合科技余经理5 小时前
同城系统海外版:一站式多语种O2O系统源码
java·开发语言·git·mysql·uni-app·go·phpstorm
一只乔哇噻5 小时前
java后端工程师+AI大模型开发进修ing(研一版‖day60)
java·开发语言·人工智能·学习·语言模型
LNN20225 小时前
Linuxfb+Qt 输入设备踩坑记:解决 “节点存在却无法读取“ 问题
开发语言·qt
Dolphin_Home5 小时前
笔记:SpringBoot静态类调用Bean的2种方案(小白友好版)
java·spring boot·笔记
foxsen_xia6 小时前
go(基础06)——结构体取代类
开发语言·算法·golang
MetaverseMan6 小时前
Java虚拟线程实战
java
巨人张6 小时前
C++火柴人跑酷
开发语言·c++
浪潮IT馆6 小时前
Tomcat运行war包的问题分析与解决步骤
java·tomcat
ID_180079054736 小时前
基于 Python 的 Cdiscount 商品详情 API 调用与 JSON 核心字段解析(含多规格 SKU 提取)
开发语言·python·json