定递归验证关联的对象可以用于继承对象吗 spring validate
提示该问答中所提及的号码未经验证,请注意甄别。
展开全部
Spring数据校验
spring拥有自己独立的数据校验框架,同时支持JSR303标注校验。springDataBinder在进行数据绑定时,可同时调用校验框架完成数据校验工作。在spring mvc中则可直接通过注解驱动的方式进行数据校验
Validator校验接口
boolean supports(Class<?> clazz):该校验器能够对clazz类型的对象进行校验
void validate(Object target,Errors errors):对目标对象进行校验,并将校验错误记录到errors
LocalValidatorFactoryBean
LocalValidatorFactoryBean既实现了spring的validator接口,也实现了JSR303的Validator接
口。只要在spring 容器中定义一个LocalValidatorFactoryBean,即可将其注入到需要校验的Bean中。
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
Spring mvc数据校验
<mvc:annotation-driven>会默认装配好一个LocalValidatorFactoryBean,通过在处理方法的入参上标注@Valid注解即可让spring mvc执行数据校验工作。
public String handle91(@Valid @ModelAttribute(“user”)Useruser,BindingResult bindingResult){
if(bingingResult.hasErrors){
return“/user/register”;
}
return “/user/showUser”
}
将入参对象添加@Valid注解,同时紧跟其后声明一个BindingResult的入参,根据BingingResult即可判断是否存在错误。绑定接口既可以是BindingResult也可以Errors类型
在页面显示错误
spring
mvc除了会将表单/命令对象的校验结果保存在对应的BindingResult或Errors中,还会将所有校验结果保存到隐含模型中,也就是说即使处
理方法的签名没有对应于表单/命令对象的校验结果入参,校验结果也不会丢失,它们始终可以在隐含模型中获取。隐含模型中所有数据最终通过
HttpServletRequest的属性列表暴露给JSP视图对象。
通过国际化资源显示错误信息
每个属性在数据绑定和数据校验发生错误时,都会产生一个对应的FieldError对象,FieldError实现了
org.springframework.context.MessageSourceResolvable接口。
MessageSourceResolvable是可用国际化资源进行解析对象。
MessageSourceResolvable提供3个接口
Object getArguments():返回一组参数对象
String[] getCodes():返回一组消息代码,每个代码对应一个资源属性,可以使用getArguments()返回的参数对资源属性进行参数替换
String getDefaultMessage():默认消息
当一个属性校验失败后,校验框架会为该属性生成4个消息代码,这些代码以校验注解类名为前缀,结合类名、属性名、属性类型名生成多个消息代码
如User类的password属性标注了一个@Pattern的注解,当校验失败后会产生如下4个错误代码
Parttern.user.password
Parttern.password
Parttern.java.lang.String
Parttern
当使用Sprng mvc标签显示错误信息时,Spring mvc查看web上下文是否装配了对应国际化消息,如果没有,则显示默认的错误消息,否则使用国际化消息对错误代码进行翻译。
如果在数据类型转换或数据类型格式时发生错误,或者该有的参数不存在,或者调用处理方法时发生错误,都会在隐含模型中创建错误消息,其错误代码前缀说明如下:
required:必要的参数不存在,如@RequestParam(“param1”)标注了一个入参,当请求参数不存在时
typeMismatch:在数据绑定时发生数据类型不匹配
methodInvocation:spring mvc在调用方法时发生错误
示例
如果”aaa”非数字参数传递给User的salary属性,将发生数据转换的错误,Spring将为该错误生成如下错误代码
typeMismatch.user.salary
typeMismatch.salary
typeMismatch.long
typMismatch
装配国际化资源
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<propertyname="basename">
<value>conf/i18n/messages</value>
</property>
</bean>
也可以通过basenames属性指定多个国际化资源
在conf/i18n下添加基名为messages的国际化资源,一个默认的messages.properties,另一个对应messages_zh_CN.properties
自定义校验规则
通过@InitBinder注解的initBinder方法中装配自定义MyValidator
@InitBinder
public void initBinder(WebDataBinder binder){
binder.setValidtor(newXXX());//在进行数据绑定时使用的校验器
}
也可以借助请求处理方法的签名传递一个Errors或BindingResult对象进来,然后在处理方法中直接校验。
public String handle92(@ModelAttribute(“user”Useruser,BindingResult bindingResult)){
ValidationUtils.rejectIfEmptyOrWritespace(bindingResult,”username”,”required”);
//产生的错误信息对象错误代码包括
//required.user.username
// required.username
// required.java.lang.String
// required
if(“aaa”.equalsIgnoreCase(user.getUsername())){
bindingResult.rejectValue(“username”,”reserved”);
//产生的错误代码如下
//reserved.user.username
// reserved.username
// reserved.java.lang.String
// reserved
}
if(bindingResult.hasErrors()){
return “/user/register4”;
}else{
return “/user/showUser”;
}
}
binder.setValidator()方法设置自定义的Validtor后,spring mvc将使用它对入参进行校验,将不在使用spring mvc框架装配的Validator对入参对象进行校验,即使入参标注了@Valid注解也不会校验
spring拥有自己独立的数据校验框架,同时支持JSR303标注校验。springDataBinder在进行数据绑定时,可同时调用校验框架完成数据校验工作。在spring mvc中则可直接通过注解驱动的方式进行数据校验
Validator校验接口
boolean supports(Class<?> clazz):该校验器能够对clazz类型的对象进行校验
void validate(Object target,Errors errors):对目标对象进行校验,并将校验错误记录到errors
LocalValidatorFactoryBean
LocalValidatorFactoryBean既实现了spring的validator接口,也实现了JSR303的Validator接
口。只要在spring 容器中定义一个LocalValidatorFactoryBean,即可将其注入到需要校验的Bean中。
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
Spring mvc数据校验
<mvc:annotation-driven>会默认装配好一个LocalValidatorFactoryBean,通过在处理方法的入参上标注@Valid注解即可让spring mvc执行数据校验工作。
public String handle91(@Valid @ModelAttribute(“user”)Useruser,BindingResult bindingResult){
if(bingingResult.hasErrors){
return“/user/register”;
}
return “/user/showUser”
}
将入参对象添加@Valid注解,同时紧跟其后声明一个BindingResult的入参,根据BingingResult即可判断是否存在错误。绑定接口既可以是BindingResult也可以Errors类型
在页面显示错误
spring
mvc除了会将表单/命令对象的校验结果保存在对应的BindingResult或Errors中,还会将所有校验结果保存到隐含模型中,也就是说即使处
理方法的签名没有对应于表单/命令对象的校验结果入参,校验结果也不会丢失,它们始终可以在隐含模型中获取。隐含模型中所有数据最终通过
HttpServletRequest的属性列表暴露给JSP视图对象。
通过国际化资源显示错误信息
每个属性在数据绑定和数据校验发生错误时,都会产生一个对应的FieldError对象,FieldError实现了
org.springframework.context.MessageSourceResolvable接口。
MessageSourceResolvable是可用国际化资源进行解析对象。
MessageSourceResolvable提供3个接口
Object getArguments():返回一组参数对象
String[] getCodes():返回一组消息代码,每个代码对应一个资源属性,可以使用getArguments()返回的参数对资源属性进行参数替换
String getDefaultMessage():默认消息
当一个属性校验失败后,校验框架会为该属性生成4个消息代码,这些代码以校验注解类名为前缀,结合类名、属性名、属性类型名生成多个消息代码
如User类的password属性标注了一个@Pattern的注解,当校验失败后会产生如下4个错误代码
Parttern.user.password
Parttern.password
Parttern.java.lang.String
Parttern
当使用Sprng mvc标签显示错误信息时,Spring mvc查看web上下文是否装配了对应国际化消息,如果没有,则显示默认的错误消息,否则使用国际化消息对错误代码进行翻译。
如果在数据类型转换或数据类型格式时发生错误,或者该有的参数不存在,或者调用处理方法时发生错误,都会在隐含模型中创建错误消息,其错误代码前缀说明如下:
required:必要的参数不存在,如@RequestParam(“param1”)标注了一个入参,当请求参数不存在时
typeMismatch:在数据绑定时发生数据类型不匹配
methodInvocation:spring mvc在调用方法时发生错误
示例
如果”aaa”非数字参数传递给User的salary属性,将发生数据转换的错误,Spring将为该错误生成如下错误代码
typeMismatch.user.salary
typeMismatch.salary
typeMismatch.long
typMismatch
装配国际化资源
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<propertyname="basename">
<value>conf/i18n/messages</value>
</property>
</bean>
也可以通过basenames属性指定多个国际化资源
在conf/i18n下添加基名为messages的国际化资源,一个默认的messages.properties,另一个对应messages_zh_CN.properties
自定义校验规则
通过@InitBinder注解的initBinder方法中装配自定义MyValidator
@InitBinder
public void initBinder(WebDataBinder binder){
binder.setValidtor(newXXX());//在进行数据绑定时使用的校验器
}
也可以借助请求处理方法的签名传递一个Errors或BindingResult对象进来,然后在处理方法中直接校验。
public String handle92(@ModelAttribute(“user”Useruser,BindingResult bindingResult)){
ValidationUtils.rejectIfEmptyOrWritespace(bindingResult,”username”,”required”);
//产生的错误信息对象错误代码包括
//required.user.username
// required.username
// required.java.lang.String
// required
if(“aaa”.equalsIgnoreCase(user.getUsername())){
bindingResult.rejectValue(“username”,”reserved”);
//产生的错误代码如下
//reserved.user.username
// reserved.username
// reserved.java.lang.String
// reserved
}
if(bindingResult.hasErrors()){
return “/user/register4”;
}else{
return “/user/showUser”;
}
}
binder.setValidator()方法设置自定义的Validtor后,spring mvc将使用它对入参进行校验,将不在使用spring mvc框架装配的Validator对入参对象进行校验,即使入参标注了@Valid注解也不会校验
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询