Spring 一起使用 @Valid 和 @InitBinder 进行 Rest 验证
Spring Rest Validation using @Valid and @InitBinder together
我有一个 spring REST 应用程序,我想使用 @Valid 注释来装饰可以为简单的 @NotNull 检查进行验证的 bean 字段。
public ResponseEntity<ExtAuthInquiryResponse> performExtAuthInq(@Valid @RequestBody ExtAuthInquiryRequest extAuthInquiryRequest)
像这样
@NotBlank(message = "requestUniqueId cannot be blank..")
private String requestUniqueId;
除此之外,我想使用@initBinder 进行更复杂的验证(比如基于一个字段的值,第二个字段是强制性的)
@InitBinder("extAuthInquiryRequest")
protected void initExtAuthInqRequestBinder(WebDataBinder binder) {
binder.setValidator(extAuthInqValidator);
}
这是验证器实现(仅适用于条件验证案例)
@Override
public void validate(Object target, Errors e) {
ExtAuthInquiryRequest p = (ExtAuthInquiryRequest) target;
// Dont want to do this check here. Can be simply done in the bean using @NotNull checks
ValidationUtils.rejectIfEmpty(e, "requestUniqueId", "requestUniqueId is empty");
// this is a good candidate to be validated here
if(StringUtils.isNotBlank(p.getPersonInfo().getContactInfo().getPhoneNumber().getPhoneType())){
if(StringUtils.isBlank(p.getPersonInfo().getContactInfo().getPhoneNumber().getPhoneNumber())){
e.rejectValue("personInfo.contactInfo.phoneNumber.phoneNumber", "phoneNumber is mandatory when phoneType is provided");
}
}
}
}
我在网上看到了一堆使用其中一个或另一个的示例。我尝试过同时使用这两种方法,但是当我设置了@initBinder 时,请求对象上的@valid 注释不再受尊重。
因为我不想在 spring 验证器 class 中编写代码来进行简单的 @NotNull 检查。
有没有办法一起做这两种方法。
我有一个 spring REST 应用程序,我想使用 @Valid 注释来装饰可以为简单的 @NotNull 检查进行验证的 bean 字段。
public ResponseEntity<ExtAuthInquiryResponse> performExtAuthInq(@Valid @RequestBody ExtAuthInquiryRequest extAuthInquiryRequest)
像这样
@NotBlank(message = "requestUniqueId cannot be blank..")
private String requestUniqueId;
除此之外,我想使用@initBinder 进行更复杂的验证(比如基于一个字段的值,第二个字段是强制性的)
@InitBinder("extAuthInquiryRequest")
protected void initExtAuthInqRequestBinder(WebDataBinder binder) {
binder.setValidator(extAuthInqValidator);
}
这是验证器实现(仅适用于条件验证案例)
@Override
public void validate(Object target, Errors e) {
ExtAuthInquiryRequest p = (ExtAuthInquiryRequest) target;
// Dont want to do this check here. Can be simply done in the bean using @NotNull checks
ValidationUtils.rejectIfEmpty(e, "requestUniqueId", "requestUniqueId is empty");
// this is a good candidate to be validated here
if(StringUtils.isNotBlank(p.getPersonInfo().getContactInfo().getPhoneNumber().getPhoneType())){
if(StringUtils.isBlank(p.getPersonInfo().getContactInfo().getPhoneNumber().getPhoneNumber())){
e.rejectValue("personInfo.contactInfo.phoneNumber.phoneNumber", "phoneNumber is mandatory when phoneType is provided");
}
}
}
}
我在网上看到了一堆使用其中一个或另一个的示例。我尝试过同时使用这两种方法,但是当我设置了@initBinder 时,请求对象上的@valid 注释不再受尊重。
因为我不想在 spring 验证器 class 中编写代码来进行简单的 @NotNull 检查。 有没有办法一起做这两种方法。