Bean验证不适用于Spring Webflux

时间:2018-12-21 16:21:23

标签: java validation spring-boot spring-webflux reactive

我已经将代码重构为使用spring webflux,但是现在@Valid停止了工作。 它不验证请求正文。

@PostMapping(value = "/getContactInfo",produces = "application/json",consumes = "application/json")
public Flux<UserContactsModel> getUserContacts(@Valid @RequestBody Mono<LoginModel> loginDetail) {

    loginDetail.log();
    return contactInfoService
        .getUserContacts(loginDetailApiMapper.loginModelMonoToLoginBoMono(loginDetail))
        .flatMapIterable(
            userContactsBO -> contactInfoMapper.userContactBoToModelList(userContactsBO));
}

我得到200 OK来代替我从控制器建议返回的错误请求。

编辑1:

   import javax.validation.constraints.NotNull;
   import javax.validation.constraints.Pattern;

    public class LoginModel implements Serializable {

      private String clientId;

      @Pattern(regexp = "^[a-zA-Z0-9]*$", message = "Login ID is invalid")
      @NotNull
      private String loginId;
    }

更新1: 像这样更改代码并在类级别添加@Validated

@RestController
@Validated
public class ContactInfoController implements ContactInfoApi {
public Flux<UserContactsModel> getUserContacts(@RequestBody  Mono<@Valid  LoginModel> loginDetail) {

我正在获取javax.validation.ConstraintDeclarationException:HV000197:未找到类型为Reactor.core.publisher.Mono的类型参数'T'的值提取器。

2 个答案:

答案 0 :(得分:0)

@Valid注释验证对象。因此,您尝试验证Mono时,需要更改为LoginModel对象,例如:

  ..getUserContacts(@RequestBody Mono<@Valid LoginModel> loginDetail) {
      ...
  }

答案 1 :(得分:0)

对我没有任何帮助。因此,我使用javax.validator对其进行了手动验证。

dat$assignment <- cumsum(dat$start_over %in% "yes") + 1