借助了spring的力量之后,原先臃肿的if - else没有了,代码瞬间变的简洁了起来。但是这样子也是有一些问题的,比如我们现在要在Controller中新增添一个修改user的接口,既然是修改接口,我们可以选择只修改user的name或者只修改user的enname。那么就会出现一个问题,新增接口的校验和修改接口的校验冲突了。新增接口要求:name和enname都不能为空,修改接口要求:name和enname可以为空,这个时候用一个user对象就有点尴尬。
@validated 分组校验
@Data
public class User {
@Min(value = 1, message = "ID不可为空", groups = {Update.class})
private int id;
@NotNull(message = "姓名不可为空", groups = {Insert.class})
private String name;
@NotNull(message = "英文姓名不可为空", groups = {Insert.class})
private String enname;
private String mobile;
}
@PostMapping("/user")
public Mono<String> insert(@RequestBody @Validated(Insert.class) User user) {
// 处理新增逻辑
return Mono.just("注册成功");
}
@PutMapping("/user")
public Mono<String> update(@RequestBody @Validated(Update.class) User user) {
// 处理修改逻辑
return Mono.just("修改成功");
}
// 随便自定义2个接口 用于标识新增和修改
public interface Insert{
}
public interface Update{
}
多组校验
public class Address {
@ZipCode.List( {
@ZipCode(countryCode="fr", groups=Default.class
message = "zip code is not valid"),
@ZipCode(countryCode="fr", groups=SuperUser.class
message = "zip code invalid. Requires overriding before saving.")
} )
private String zipcode;
}