Spring @Valid和@Validated区别和用法实例
两者区别
@Valid |
@Validated | |
|---|---|---|
| 标准 | 标准JSR-303规范 | 增强JSR-303规范 |
| 包 | javax.validation | org.springframework.validation |
| 验证结果 | BindingResultresult | BindingResultresult |
| 分组支持 | 不支持 | 支持 |
| 分组序列 | 不支持 | 支持 |
| 类型注解 | ? | 支持 |
| 方法注解 | 支持 | 支持 |
| 方法参数注解 | 支持 | 支持 |
| 构造函数注解 | 支持 | ? |
| 成员属性注解 | 支持 | 不支持 |
| 嵌套验证 | 支持 | 不支持 |
分组示例
publicinterfaceFirst{}
publicinterfaceSecond{}
publicclassUser{
//所有都验证
@NotNull(message="...")
privateintid;
//First才验证
@NotNull(message="...",groups={First.class})
privateStringusername;
//First或Second才验证
@NotNull(message="...",groups={First.class,Second.class})
privateStringcontent;
//First验证NotEmpty,Second验证Size
@NotEmpty(message="...",groups={First.class})
@Size(message="...",min=3,max=8,groups={Second.class})
privateStringheight;
}
//只验证Second分组和没有分组的属性
publicStringsave(@Validated({Second.class})Useruser,BindingResultresult){
if(result.hasErrors()){
return"validate/error";
}
return"redirect:/success";
}
分组序列
publicinterfaceGroupA{}
publicinterfaceGroupB{}
@GroupSequence({GroupA.class,GroupB.class})
publicinterfaceGroup{}
public@ResponseBodyStringsave(@Validated({Group.class})Useruser,BindingResultresult){
if(result.hasErrors()){
returnfalse;
}
returntrue;
}
嵌套验证
publicclassItem{
@NotNull(message="id不能为空")
@Min(value=1,message="id必须为正整数")
privateLongid;
@Valid
@NotNull(message="props不能为空")
@Size(min=1,message="至少要有一个属性")
privateListprops;
}
publicclassProp{
@NotNull(message="pid不能为空")
@Min(value=1,message="pid必须为正整数")
privateLongpid;
@NotNull(message="vid不能为空")
@Min(value=1,message="vid必须为正整数")
privateLongvid;
@NotBlank(message="pidName不能为空")
privateStringpidName;
@NotBlank(message="vidName不能为空")
privateStringvidName;
}
@RestController
publicclassItemController{
@RequestMapping("/item/add")
publicvoidaddItem(@ValidatedItemitem,BindingResultbindingResult){
doSomething();
}
}
验证多个对象
@Controller
publicclassPeopleController{
@RequestMapping("/add")
public@ResponseBodyStringadd(@ValidatedPeoplepp,BindingResultresult1,@ValidatedPersonps,BindingResultresult2)
{
if(result1.hasErrors())
{
returnfalse;
}
if(result2.hasErrors())
{
returnfalse;
}
returntrue;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。