引言
这里主要讲解在Spring Boot项目中整合hibernate validator框架实现Spring Boot项目的validation 验证机制。方便后端验证前端或者接口传递过来的数据格式是否正确。一.准备环境
- jdk1.8+(Spring Boot项目推荐使用1.8)
- eclipse(或者你喜欢的IDE)
- maven 3+
二.编码实现Spring Boot validation
2.1创建一个spring boot项目并添web模块和validation模块
项目结构图如下:
项目的依赖文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.xqlee.project.demo</groupId>
<artifactId>demo-springboot-hibernate-validator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-springboot-hibernate-validator</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter- </artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
注意:
该模块会自动加载hibernate-validation依赖。不要自己手动配置谨防依赖问题<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2.2编写一个测试的简单对象POJO
package net.xqlee.project.demo.pojo;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;
public class User {
@NotBlank(message = "用户名称不能为空。")
private String name;
@Range(max = 150, min = 1, message = "年龄范围应该在1-150内。")
private Integer age;
@NotEmpty(message = "密码不能为空")
@Length(min = 6, max = 8, message = "密码长度为6-8位。")
@Pattern(regexp = "[a-zA-Z]*", message = "密码不合法")
private String password;
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
细心的朋友可能已经发现一些属性上的注解。验证框架正是实现了这些注解的具体验证。hibernate在java的JSR-303标准上还添加了一些额外的验证注解实现。这些实现都为我们后端验证数据取得了巨大的方便。
提示:
验证注解推荐使用javax.validation.constraints包下的注解,不要使用hibernate的
在2.0中hibernate的很多注解已经弃用,但是javax.validation.constraints包下的注解增多增强
一种规范性的趋势
2.3编写一个controller用于测试验证机制
package net.xqlee.project.demo.controller;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import net.xqlee.project.demo.pojo.User;
@RestController
public class ValidatorController {
private static final Logger log = LoggerFactory.getLogger(ValidatorController.class);
/**
* 验证框架使用测试
*
* @param user
* @param result
*/
@PostMapping("v/t1.json")
public void v1(@Validated User user, BindingResult result) {
StringBuilder sBuilder = new StringBuilder();
sBuilder.append("\n");
if (result.hasErrors()) {
List<ObjectError> list = result.getAllErrors();
for (ObjectError error : list) {
log.info(error.getCode() + "---" + error.getArguments() + "---" + error.getDefaultMessage());
sBuilder.append(error.getDefaultMessage());
sBuilder.append("\n");
}
}
log.info(sBuilder.toString());
}
}
提示:
@Validated (org.springframework.validation.annotation)
或者@Valid(javax.validation)
验证注解推荐写在方法的参数列表中,例如:
Object methodName(@Valid Object params){...}
Object methodName(@Validated Object params){...}
三.演示
3.1启动spring boot项目
3.2通过工具postmain进行提交数据验证
第一组测试:提交全部为空数据:
观察eclipse的控制台输出:
可以看到非空验证已经实现。
第二组测试:
接下来输入一个非空的名称和密码
观察eclipse控制台:
可以看到名称的验证错误信息已经没有说明已经输入正确。但是密码却没有通过正则表达式的验证所以报错不合法,在对象上我们设置的密码只能是大写的字母。所以刚才输入的全数字不合法。
第三组测试:
接下来输入正常的密码
可以看到已经没有错误信息。验证通过
版权申明:本文为博主原创文章,未经博主允许不得转载。
https://www.leftso.com/blog/328.html
时效提示:本文最后更新于【 2018-07-30 14:11:04 】,某些文章具有时效性,若有错误或已失效,请在下方留言。
时效提示:本文最后更新于【 2018-07-30 14:11:04 】,某些文章具有时效性,若有错误或已失效,请在下方留言。
评论区域
评论功能已关闭. 提示:评论功能虽已关闭,关闭之前的评论仍然会展示。