【问题标题】:Spring Boot Validation - How to retrieve input message in MethodArgumentNotValidException handlerSpring Boot Validation - 如何在 MethodArgumentNotValidException 处理程序中检索输入消息
【发布时间】:2021-07-28 17:52:34
【问题描述】:

我正在使用 spring-boot-starter-validation 依赖项来验证我的应用程序的 java bean

我的控制器代码如下

@PostMapping("/testMessage")
    ResponseEntity<String> testMethod(@Valid @RequestBody InternalMsg internalMsg) {
        return ResponseEntity.ok("Valid Message");
    }

InternalMsg 类

public class InternalMsg implements Serializable {
    @NotNull(message = "Msg Num is a required field")
    private String msgNumber;
    @NotEmpty(message = "Activity Name is a required field")
    private String activityName;
}

InternalMsg 示例输入 JSON

{
    "MSGNUMBER": "12345",
    "ACTIVITYNAME": "",
}

我的处理程序代码如下

@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<InternalMsgResponse> handleValidationExceptions(
        MethodArgumentNotValidException ex) {
    InternalMsgResponse msg = new InternalMsgResponse();
    ex.getBindingResult().getAllErrors().forEach((error) -> {
        String errorMessage = error.getDefaultMessage(); // Error Message
        ack.setStatusNotes(errorMessage);
    });
    return ResponseEntity.ok().body(msg);
}

根据示例输入,活动名称为空,因此我收到一条验证错误消息,即“活动名称是必填字段”。

对于其他一些处理,我需要在处理程序中获取输入 Msg 的值,即我想获取 msgNumber 值(12345),它是一个 VALID 值。

有可能吗?如果是这样,请指导如何在处理程序中检索这些值。

【问题讨论】:

  • 感谢您的参考,但我想在这里获得一个有效的字段值。我总是对一个特定的字段值感兴趣,它是 msgNumber,这里的活动名称无效
  • 我已经更新了我的问题

标签: java spring spring-boot spring-boot-starter


【解决方案1】:

你可以打电话

ex.getTarget()

这将返回对象。然后只需将其转换为InternalMsg

如果您使用的是 2.4.x 之前的旧 Spring Boot 版本,那么您必须调用

ex.getBindingResult().getTarget()

【讨论】:

  • 我没有得到这个方法.. ex.getTarget() 说“无法在 'MethodArgumentNotValidException' 中解析方法 'getTarget'”
  • 你使用的是哪个 Spring Boot 版本?
  • 2.3.1.RELEASE
  • 从 Spring Framework 5.3.0 版开始,MethodArgumentNotValidException 扩展了实现 BindingResultBindException,而 BindingResult 又定义了 .getTarget() 方法。
  • 非常感谢,效果很好!你节省了我很多时间
猜你喜欢
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
相关资源
最近更新 更多