Spring 引导验证 - 如何在 MethodArgumentNotValidException 处理程序中检索输入消息
Spring Boot Validation - How to retrieve input message in MethodArgumentNotValidException handler
我正在使用 spring-boot-starter-validation
依赖项为我的应用程序验证 java beans
我的控制器代码如下
@PostMapping("/testMessage")
ResponseEntity<String> testMethod(@Valid @RequestBody InternalMsg internalMsg) {
return ResponseEntity.ok("Valid Message");
}
内部消息class
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);
}
根据示例输入,activity 名称为空,因此我收到验证错误消息“Activity 名称是必填字段”。
对于其他一些处理,我需要在处理程序中获取输入消息的值,即我想获取 msgNumber 值 (12345),这是一个有效值。
可能吗?如果是这样,请指导如何在处理程序中检索这些值。
您可以拨打
ex.getTarget()
这将 return 对象。然后简单地将其转换为 InternalMsg
如果您使用的是 Spring 2.4.x 之前的引导版本,那么您必须调用
ex.getBindingResult().getTarget()
我正在使用 spring-boot-starter-validation
依赖项为我的应用程序验证 java beans
我的控制器代码如下
@PostMapping("/testMessage")
ResponseEntity<String> testMethod(@Valid @RequestBody InternalMsg internalMsg) {
return ResponseEntity.ok("Valid Message");
}
内部消息class
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);
}
根据示例输入,activity 名称为空,因此我收到验证错误消息“Activity 名称是必填字段”。
对于其他一些处理,我需要在处理程序中获取输入消息的值,即我想获取 msgNumber 值 (12345),这是一个有效值。
可能吗?如果是这样,请指导如何在处理程序中检索这些值。
您可以拨打
ex.getTarget()
这将 return 对象。然后简单地将其转换为 InternalMsg
如果您使用的是 Spring 2.4.x 之前的引导版本,那么您必须调用
ex.getBindingResult().getTarget()