实体类代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EnterpriseRegister {
@Size(min = 2, max = 10, message = "联系人名称")
private String contactsName;
@Pattern(regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$", message = "使用正则校验邮箱")
private String contactsEmail;
@Pattern(regexp = "^1[35678]\\d{9}$", message = "使用正则校验手机号")
private String contactsPhone;
@Size(min = 2, max = 2, message = "地区编码")
private String regionCode;
@Size(min = 1, max = 20, message = "市名称")
private String cityName;
@Size(min = 1, max = 40, message = "详细地址")
private String enterpriseAddress;
@Size(min = 4, max = 50, message = "税务登记证图片")
private String taxRegistrationCertificate;
@Size(min = 1, max = 1, message = "注册百度1, 注册腾讯2,注册阿里巴巴3")
private String flag;
}
在Controller的方法里面,如果不使用@Valid校验,就是太麻烦了。需要一个一个if判断是否合规,现在有了@Valid就方便多了。
WebFlux中Controller代码:
@PostMapping(value = "/register", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Mono enterpriseRegister(@Valid @RequestBody Mono enterpriseRegister) {
return enterpriseRegister
.map(enterpriseRegister1 -> {
return new Result(true, ReturnCode.SUCCESS, "模拟ok", enterpriseRegisterService.enterpriseRegister(enterpriseRegister1).block());
})
.doOnError(throwable -> log.info("失败原因:>>>" + throwable.getMessage()))
.onErrorReturn(throwable -> throwable instanceof WebExchangeBindException, new Result(false, ReturnCode.FAIL, "参数不合法"));
}
return 后面将会订阅这个Mono,如果EnterpriseRegister对象封装不成功,将会发生WebExchangeBindException异常,后面对这个异常进行捕捉,如果捕捉ok则参数不合法
Spring MVC的校验方式:(上面的实体类不变)
@PostMapping(value = "/register", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Mono enterpriseRegister(@Valid @RequestBody Mono enterpriseRegister, Errors errors) {
if(errors.hasErrors())
return Mono.just(new Result(false, ReturnCode.FAIL, "参数不合法"));
return enterpriseRegister
.map(enterpriseRegister1 -> {
return new Result(true, ReturnCode.SUCCESS, "注册商户成功", enterpriseRegisterService.enterpriseRegister(enterpriseRegister1).block());
});
}
如果实体类不符合校验规则,则Errors对象会被访问,会有错误,可以使用hasErrors来进行判断,是否有错误发生,如果有则不符合校验规则。