使用springMVC校验框架对参数进行后台校验

使用springMVC校验框架对参数进行后台校验
页面向controller请求的参数是否合法,可以在js中校验,但是对于安全性能要求较高的数据需要在controller层再次校验

  1. 导入jar包:
  2. 在springmvc.xml中配置校验器 (1)配置校验器(写上校验器的提供方,这里使用hibernate,也可以使用其他的校验器,原理都一样)
    (2)配置错误信息的资源文件(因为要将错误信息输出到页面,希望把所有的错误信息都放到一个资源文件中统一输出)
    3.将校验器注入到处理器适配器中(把校验器的bean的id写到这里即可)
    4.在根目录下创建resourceMessage.properties文件
    5.因为在校验之前,需要将参数绑定到pojo,所以要在需要参数校验的对应的POJO中添加校验规则
    6.在controller中接收校验的错误信息(在需要校验的POJO前添加@Validated,其后添加BindingResult bindingResult,用这个对象来接收校验的错误信息)
    7.将错误信息添加到页面(放到Model属性中即可)
    8.通过foreach 来遍历输出错误信息到页面上

第一步

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
	//这个才是正在来校验
	<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
	指定校验的资源文件
	<property name="validationMessageSource" ref="messageSource"></property>
</bean>

校验错误信息配置文件 Spring定义了访问国际化信息的MessageSource接口,并提供了几个易用的实现类。

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
	资源文件名resourceMessage.properties 里面key=value  value是你自己写的错误信息提示
	<property name="basenames">//里面的属性basenames
		<list><value>classpath:resourceMessage</value></list>
	</property>
	<property name="fileEncodings" value="utf-8"></property>
	用于设置response的content-type的信息为text/html;charset=UTF-8,
	用来告诉浏览器,此次我返回的数据为html,字符编码为utf-8

</bean>

第二步
<>

<mvc:annotation-driven conversion-service="conversionService" validator="validator"></mvc:annotation-driven>

第三步
@Validated(value= {ValiAddProductGroup.class}) Product product,BindingResult bindingResult BindingResult是用来校验存放错误信息的容器
第四步
捕获错误信息 –在controller中将错误信息传到页面即可
写在方法里面

List<ObjectError> errors=null;
if(bindingResult.hasErrors())
{
					errors=bindingResult.getAllErrors();
					
					for (ObjectError o:errors) {
						System.out.println(o.getDefaultMessage());
					}
}else
{
	System.out.println("product:"+product);
}
ModelAndView mav=new ModelAndView();
mav.setViewName("add_product");
mav.addObject("errors", errors);
return mav;

可能遇到的错误
HV000030: No validator could be found for type: java.lang.Integer.
异常,一般去查找在类的Integer属性上加了不属于整型的校验,比如@NotEmpty,@Length等

使用分组校验分别对添加商品页面和更新商品页面进行后台校验

第一步 先创建2个需要验证的页面接口
第二步 在要用到的实体类中对每个属性进行分组
@NotNull(message="{productDateIsNullError}",groups=
{ValiAddProductGroup.class})
@DecimalMin(value=“0.00”,message="{productPriceMinError}",groups=
{ValiUpdateProductGroup.class,ValiAddProductGroup.class})
第三步
在Contoller 里面方法进行分组 @Validated(value= {ValiUpdateProductGroup.class})
@Validated(value= {ValiAddProductGroup.class})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值