@Validated⾃定义实现多种校验
在开发过程中经常会遇到不同的场景和⽅法,需要对同⼀个类参数进⾏不同的校验,如何通过注解实现不同场景的校验,下⾯举个例⼦:⽤户信息ur对象的新增和修改时,新增不需要校验id,⽽修改时必须校验id不能为空:
1.定义实体类
package ity;
import org.straints.Length;
import straints.NotNull;
public class Ur {
@NotNull(groups ={valid2.class})
private Integer id;
@NotNull(groups ={valid1.class,valid2.class})
@Length(min =6,max =32,groups ={valid1.class,valid2.class})
private String name;
@NotNull(groups ={valid1.class,valid2.class})
private String x;
@NotNull(groups ={valid1.class,valid2.class})
@Length(min =0,max =100,groups ={valid1.class,valid2.class})
private Integer age;
public Integer getId(){
return id;
}
public void tId(Integer id){
this.id = id;
}
public String getName(){
return name;
}
public void tName(String name){
this.name = name;
}
public String getSex(){
return x;
}
public void tSex(String x){
this.x = x;
}
public Integer getAge(){
return age;
}
public void tAge(Integer age){
this.age = age;
}
/**
* 新增时候参数校验
*/
public interface valid1{
public interface valid1{
}
/**
* 修改时参数校验
*/
public interface valid2{
}
}
上⾯通过定义了两个interface,valid1和valid2,通过groups参数配置在参数校验信息上,相当于定义了两个检验⽅式,有的参数参与⼀种校验,有的参与两个校验⽅式。
2.Controller层控制传参校验⽅式
import ity.Ur;
import org.sang.rvice.UrService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@RestController(value ="/ur")
public class UrController {
@Autowired
private UrService urService;
/**
* 新增⽤户
* @param ur
* @return
*/
@RequestMapping("/inrt")
@ResponBody
public Ur inrt(@RequestBody @Validated(Ur.valid1.class) Ur ur){
return urService.inrt(ur);
}
/**
* 修改⽤户
* @param ur
* @return
*/
@RequestMapping("/update")
@ResponBody
public boolean update(@RequestBody @Validated(Ur.valid2.class) Ur ur){
return urService.update(ur);
}
}
如上⾯代码可以控制每个⽅法传参时参与那种参数校验,可以根据实际业务场景,定义更多的interface去实现不同的参数校验⽅式。