Spring MVC+FastJson+hibernate-validator整合的完整实例教程
|
一:hibernate-validator 基础 1. 简介: 通过使用注解Annotations 给类或者类的属性加上约束(constraint),在运行期检查属性值的合法性. 2. 作用: 在API接口开发中参数校验是非常重要的事情,因为客户端很可能会少传参数,或者值不合法,甚至参数值是恶意的,所以对客户端传来的参数的合法性就必须要校验了,其中将参数值的校验规则通过注解的形式注解到属性上是一种比较优雅的方式。 3. 常用的约束注解
4. 初识hibernate-validator
public class Address {
@NotNull private String line1;
private String line2;
private String zip;
private String state;
@Length(max = 20)
@NotNull
private String country;
@Range(min = -2,max = 50,message = "Floor out of range")
public int floor;
// getter&&setter
}
二:整合校验 hibernate-validator 该示例是在SpringMVC+FastJson整合(http://www.jb51.net/article/139094.htm)基础上进行集成的,可以先看一下这篇文章(有源码供下载),在该文章的基础上整合hibernate-validator 整合步骤: 1、在pom.xml中引入hibernate-validator依赖 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.4.1.Final</version> </dependency> 2、在[xxx]-servlet.xml中配置验证器:HibernateValidator <!-- <mvc:annotation-driven> 增加验证器属性validator="validator" --> <mvc:annotation-driven validator="validator"> <mvc:message-converters register-defaults="true"> <!-- 配置Fastjson 替换原来的jackson支持 --> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json</value> </list> </property> <property name="features"> <list> <value>QuoteFieldNames</value> <value>WriteMapNullValue</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <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:conf/settings/validation</value> <value>classpath:org/hibernate/validator/ValidationMessages</value> </list> </property> <property name="useCodeAsDefaultMessage" value="false"/> <property name="defaultEncoding" value="UTF-8"/> <property name="cacheSeconds" value="60"/> </bean> 3、在src/main/resources/conf/settings位置定义验证消息文件描述 validation.properties validation.common.not.null=该字段不能为空 validation.common.not.range=长度非法 validation.common.format.error=格式错误 validation.param.age=年龄未满18周岁 rep.error.unknown=未知错误 4、新建实体类以供测试 UserEntity
package com.mengdee.manage.validator;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
public class UserEntity {
@Null(groups={GroupA.class})
@NotNull(groups={GroupB.class})
@Min(value = 1,message="id值必须大于0",groups={GroupB.class})
private Long id;
@NotBlank(groups={GroupA.class,GroupB.class})
@Pattern(regexp="^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$",message="由6-21字母和数字组成,不能是纯数字或纯英文",groups={GroupA.class,GroupB.class})
private String password;
@NotBlank(groups={GroupA.class,GroupB.class})
@Pattern(regexp="^((13[0-9])|(15[^4,D])|(18[0,3-9]))d{8}$",message="手机号格式不正确")
private String phone;
@NotBlank(groups={GroupB.class})
@Length(min=6,max=12,message="昵称长度为6到12位")
private String nickname;
@Min(value=18,message="{validation.param.age}")
private int age;
@NotBlank(groups={GroupA.class})
@Email(message="{validation.common.format.error}")
private String email;
@NotBlank
@Length(min=3,max=10,message="{validation.common.not.range}")
private String username;
public UserEntity() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
UserModel
package com.mengdee.manage.validator;
import javax.validation.constraints.Min;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
public class UserModel {
@Min(value = 1,message="id值必须大于0")
private long id;
@NotBlank
@Length(min=6,message="{validation.param.age}")
private int age;
@NotBlank
@Email(message="{validation.common.format.error}")
private String email;
@NotBlank
@Pattern(regexp="^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,message="由6-21字母和数字组成,不能是纯数字或纯英文")
private String password;
@NotBlank
@Length(min=3,message="{validation.common.not.range}")
private String username;
@NotBlank
@Pattern(regexp="^((13[0-9])|(15[^4,message="手机号格式不正确")
private String phone;
public UserModel() {
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
