• MethodArgumentNotValidException提取关键报错信息返回


    问题:报错框架问题

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

    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个字符]]

    修改代码如下:

    1. @ExceptionHandler(MethodArgumentNotValidException.class)
    2. public ResponseDTO exceptionHandler(MethodArgumentNotValidException e) {
    3. BindingResult bindingResult = e.getBindingResult();
    4. List fieldErrors = bindingResult.getFieldErrors();
    5. String errorMessage = fieldErrors.stream()
    6. .findFirst()
    7. .map(FieldError::getDefaultMessage)
    8. .orElse("Invalid request");
    9. ResponseDTO result = ResponseDTO.fail(ExceptionTemplate.INVALID_REQUEST_COMMON, errorMessage);
    10. log.error("invalid request error", e);
    11. return result;
    12. }

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

  • 相关阅读:
    程序员如何提升自己写代码的能力?
    2022年QT初体验以及未来趋势发展以及前景概要
    基于SpringBoot的学生班级考勤管理系统
    SSM之Spring注解式缓存Redis
    Redis-五种数据类型
    python笔记之面向对象
    【JAVA】单元测试的简单应用
    Docker
    InfluxDB、Grafana、node_exporter、Prometheus搭建压测平台
    Ubuntu安装mysql8遇到的问题以及详细安装过程
  • 原文地址:https://blog.csdn.net/Enya61/article/details/139327459