本文主要研究下webflux如何进行参数校验
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
public class User {
@Min(1)
private long id;
@NotEmpty
private String name;
@Min(20)
private int age;
//...
}
javax.validation虽然是方便,但是具体业务场景非常复杂,不是简单的单个字段校验就完事的,有的需要关联校验,这个时候javax.validation就无能为力了。这个时候可能就需要手工来写校验。
/**
* curl -i -X POST -d 'id=-1&name=a&age=10' http://localhost:8080/user/manual-validate
*
* curl -i -X POST -d 'id=2&name=a&age=-1' http://localhost:8080/user/manual-validate
* @param user
* @return
*/
@PostMapping(value = "/manual-validate",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Mono<String> manualValidate(Mono<User> user){
return user.flatMap(u -> {
if(u.getAge() < 0){
return Mono.error(new RuntimeException("age < 0"));
}else{
return Mono.just("success");
}
});
}
通过使用javax.validation自动校验及Mono.error手工校验,基本可以处理大多数webflux参数校验场景。