【hibernate-validator+SpringMVC】后台参数校验框架

hibernate-validator+SpringMVC

简介:简单说,就是对Entity进行校验。

1、导包,没有很严谨的对应关系,所以我用了比较新的版本,支持更多的注解。

 
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.5.Final</version>
        </dependency>
        <dependency>
             <groupId>org.hibernate.validator</groupId>
             <artifactId>hibernate-validator-cdi</artifactId>
             <version>6.0.5.Final</version>
        </dependency>

2、Spring配置文件中:

	<!-- swagger2 -->
	<!--http://localhost:8080/zztabc/swagger-ui.html#/-->
	<!--<mvc:default-servlet-handler />
	<mvc:resources
			mapping="/webjars/**"
			location="classpath:/META-INF/resources/webjars/" />-->

	<mvc:annotation-driven validator="validator"/>
	<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="basename" value="classpath:validationMessages"/>-->
		<!-- 对资源文件内容缓存时间,单位秒 -->
		<property name="fileEncodings" value="GBK"/>
		<property name="defaultEncoding" value="GBK"/>
		<property name="cacheSeconds" value="120"/>
	</bean>




3、entity:

package com.zztabc.controller.vali;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.List;

/**
 * 员工表
 * @author ZX
 *
 */
public class Emp implements Serializable{
	private static final long serialVersionUID = 1L;

	@NotBlank(message="名字不能为空或者空串")
	@Length(min=2,max=10,message="名字必须由2~10个字组成")
	private String name;
	@NotNull
	@Min(value = 18,message = "年龄应该小于18")
	private Integer age;
	@NotNull
	@Max(value = 50,message = "年龄不能大于50")
	private Integer ageMax;
	@NotBlank
	@Pattern( regexp = "/^[a-z0-9_-]{3,16}$/",message = "用户名为3-16位整数+英文")
	private String loginName;


	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public Integer getAgeMax() {
		return ageMax;
	}

	public void setAgeMax(Integer ageMax) {
		this.ageMax = ageMax;
	}

	public String getLoginName() {
		return loginName;
	}

	public void setLoginName(String loginName) {
		this.loginName = loginName;
	}

	@Override
	public String toString() {
		return "Emp{" +
				"name='" + name + '\'' +

				'}';
	}
}

4、controller:

    /**
        @Valid Emp e     被验证的Bean前添加@Valid  
        BindingResult br 每个被验证对象后面都跟一个BindingResult对象,里面持有错误返回信息。 

     */
    @RequestMapping("/hi2")
    public  ModelAndView  sayHello2(@Valid Emp e ,BindingResult br){

        ModelAndView mov = new ModelAndView("hello");
        if(br.hasErrors()) {
            System.out.println("校验出错");

            /*  FieldError fieldError= br.getFieldError();
            System.out.println(fieldError.getDefaultMessage());*/
            /* List<ObjectError> ls=br.getAllErrors();
            for (int i = 0; i < ls.size(); i++) {
                System.out.println("error:"+ls.get(i).getDefaultMessage());
            }*/
            List<FieldError> list = br.getFieldErrors();
            for (FieldError fieldError2 : list) {
                System.out.println("属性名"+fieldError2.getField()+">>>"+fieldError2.getDefaultMessage());
                //jsp展示用
                mov.addObject(fieldError2.getField()+"Tip",fieldError2.getDefaultMessage());
            }

        }


        return mov;
    }



5、jsp返回值:

一般框架提供了标签进行直接显示统一返回数据,但是不够灵活,所以我没有看那种方式,我在controller中获取到属性以及报错信息set进了ModelAndView对象,直接使用${属性名Tip}进行取值即可。

6、注解详解(摘抄,未找到原创博主,具体也可以看官网):

@Valid	被注释的元素是一个对象,需要检查此对象的所有字段值
@Null	被注释的元素必须为 null
@NotNull	被注释的元素必须不为 null
@AssertTrue	被注释的元素必须为 true
@AssertFalse	被注释的元素必须为 false
@Min(value)	被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)	被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)	被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)	被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min)	被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction)	被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past	被注释的元素必须是一个过去的日期
@Future	被注释的元素必须是一个将来的日期
@Pattern(value)	被注释的元素必须符合指定的正则表达式


2. Hibernate Validator 附加的 constraint
注解	作用
@Email	被注释的元素必须是电子邮箱地址
@Length(min=, max=)	被注释的字符串的大小必须在指定的范围内
@NotEmpty	被注释的字符串的必须非空
@Range(min=, max=)	被注释的元素必须在合适的范围内
@NotBlank	被注释的字符串的必须非空
@URL(protocol=,host=, port=, regexp=, flags=)	被注释的字符串必须是一个有效的url
@CreditCardNumber	被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性
@ScriptAssert(lang=, script=, alias=)	要有Java Scripting API 即JSR 223 ("Scripting for the JavaTM Platform")的实现
@SafeHtml(whitelistType=, additionalTags=)	classpath中要有jsoup包

hibernate补充的注解中,最后3个不常用,可忽略。
主要区分下@NotNull  @NotEmpty  @NotBlank 3个注解的区别:
@NotNull           任何对象的value不能为null
@NotEmpty       集合对象的元素不为0,即集合不为空,也可以用于字符串不为null
@NotBlank        只能用于字符串不为null,并且字符串trim()以后length要大于0

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值