Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring启动验证-如何在MethodArgumentNotValidException处理程序中检索输入消息_Java_Spring_Spring Boot_Spring Boot Starter - Fatal编程技术网

Java Spring启动验证-如何在MethodArgumentNotValidException处理程序中检索输入消息

Java Spring启动验证-如何在MethodArgumentNotValidException处理程序中检索输入消息,java,spring,spring-boot,spring-boot-starter,Java,Spring,Spring Boot,Spring Boot Starter,我正在使用springbootstartervalidation依赖项为我的应用程序验证javabean 我的控制器代码如下 @PostMapping("/testMessage") ResponseEntity<String> testMethod(@Valid @RequestBody InternalMsg internalMsg) { return ResponseEntity.ok("Valid Message"

我正在使用
springbootstartervalidation
依赖项为我的应用程序验证javabean

我的控制器代码如下

@PostMapping("/testMessage")
    ResponseEntity<String> testMethod(@Valid @RequestBody InternalMsg internalMsg) {
        return ResponseEntity.ok("Valid Message");
    }
@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);
}
InternalMsg示例输入JSON

{
    "MSGNUMBER": "12345",
    "ACTIVITYNAME": "",
}
我的处理程序代码如下

@PostMapping("/testMessage")
    ResponseEntity<String> testMethod(@Valid @RequestBody InternalMsg internalMsg) {
        return ResponseEntity.ok("Valid Message");
    }
@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);
}
@ResponseStatus(HttpStatus.BAD_请求)
@ExceptionHandler(MethodArgumentNotValidException.class)
公共责任处理例外情况(
MethodArgumentNotValidEx){
InternalMsgResponse msg=新的InternalMsgResponse();
例如:getBindingResult().getAllErrors().forEach((错误)->{
String errorMessage=error.getDefaultMessage();//错误消息
确认设置状态注释(错误消息);
});
返回ResponseEntity.ok().body(msg);
}
根据示例输入,活动名称为空,因此我得到一条验证错误消息,即“活动名称是必填字段”

对于其他一些处理,我需要在处理程序中获取input Msg的值,也就是说,我想要获取有效值msgNumber值(12345)

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

您可以调用

ex.getTarget()
这将返回对象。然后简单地将其转换为
InternalMsg

如果您使用的是2.4.x之前的旧Spring引导版本,则必须调用

ex.getBindingResult().getTarget()
你可以打电话

ex.getTarget()
这将返回对象。然后简单地将其转换为
InternalMsg

如果您使用的是2.4.x之前的旧Spring引导版本,则必须调用

ex.getBindingResult().getTarget()

看看这个答案:谢谢你的参考,但我想在这里得到一个有效的字段值。我总是对一个特定的字段值感兴趣,它是msgNumber,这里的活动名称是invalidI,我已经更新了我的问题看看这个答案:谢谢你的参考,但我想在这里得到一个有效的字段值。我总是对一个特定的字段值感兴趣,它是msgNumber,这里的活动名称是invalidI,我已经更新了我的问题,我没有得到这个方法。。例如,getTarget()表示“无法解析‘MethodArgumentNotValidException’中的方法‘getTarget’”。您使用的是哪个Spring启动版本?我知道是2.3.1.RELEASEAh。我已经从Spring Framework 5.3.0版更新了我的答案,
MethodArgumentNotValidException
扩展了
BindException
,它实现了
BindingResult
,进而定义了
.getTarget()
方法。我没有得到这个方法。。例如,getTarget()表示“无法解析‘MethodArgumentNotValidException’中的方法‘getTarget’”。您使用的是哪个Spring启动版本?我知道是2.3.1.RELEASEAh。我已经从Spring Framework 5.3.0版更新了我的答案,
MethodArgumentNotValidException
扩展了
BindException
,它实现了
BindingResult
,进而定义了
.getTarget()
方法。