springmvc的服务端数据验证

最新没事写下springmvc中的服务端数据校验,springmvc采用了hibernate的校验框架进行校验,当然这个hibernate没有半毛钱关系首先在实际开发中,通常使用较多是前端的校验,比如页面中js校验,对于安全性要求较高的建议在前端和服务端都进行验证。服务端校验可以是在控制(controller)层也可以是在业务(service)层,控制层校验页面请求的参数的合法性,在服务端控制层的校验,不区分客户端类型(浏览器、手机客户端、远程调用等),服务层主要校验关键业务参数,仅限于service接口中使用的参数。下来写下如何使用

1、MAVEN添加依赖包

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.0.GA</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.3.2.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <version>3.1.0.CR2</version>
        </dependency>    

2、配置校验器

<bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
        
        <property name="validationMessageSource" ref="messageSource" />
    </bean>

<bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>     
<!--这里可以自己定义也可以使用系统的-->         
<!-- <value>classpath:org/hibernate/validator/ValidationMessages</value> --> 
<value>classpath:MyValidationMessages</value>
            </list>
        </property>
         <property name="useCodeAsDefaultMessage" value="false"/>  
      <!---编码格式-->
        <property name="defaultEncoding" value="UTF-8"/> 
<!---缓存时间 单位是毫秒--> 
        <property name="cacheSeconds" value="60"/>  
    </bean>

3、将校验器注入的处理器适配器中

    <!-- 会自动注册了validator ConversionService-->
    <mvc:annotation-driven validator="validator"
        conversion-service="conversion-service" />

4、pojo中添加校验规则

public class Account {
 //长度最少为2 最大为5    
  @Size(min=2,max=5,message="{account.id.length.error}")
  private String id;
 //不允许为空
  @NotBlank(message="{account.name.isblank}")
  private String name; 
....

5、添加自己的提示文件(创建MyValidationMessages.properties)

 

6、获取校验信息

    @ResponseBody
    @RequestMapping(value="/saveOrUpdate")
    public String saveOrUpdate(@Validated Account account,BindingResult bindingResult){
        StringBuffer sb = new StringBuffer();
        if(bindingResult.hasErrors()){
            List<ObjectError> errors =bindingResult.getAllErrors();
            for (ObjectError objectError : errors) {
                sb.append(objectError.getDefaultMessage());
            }
            return JSON.toJSONString(sb);
        }
}

 

6、分组校验

根据需要创建N个ValidationGroupBase.class用于分组 

    @ResponseBody
    @RequestMapping(value="/saveOrUpdate")
    public String saveOrUpdate(@Validated(value={ValidationGroupBase.class}) Account account,BindingResult bindingResult){
        StringBuffer sb = new StringBuffer();
        if(bindingResult.hasErrors()){
            String isd;
            List<ObjectError> errors =bindingResult.getAllErrors();
            for (ObjectError objectError : errors) {
                sb.append(objectError.getDefaultMessage());
            }
            return JSON.toJSONString(sb);
        }
}

 

public class Account {
 //长度最少为2 最大为5    
  @Size(min=2,max=5,groups={ValidationGroupBase.class},message="{account.id.error}")
  private String id;
 //不允许为空
  @NotBlank(message="{account.name.isblank}")
  private String name;
  }

 

 

 

posted on 2018-01-14 22:24 会跳舞的笨笨熊 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/ITguoguo/p/8284629.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值