Spring Boot validation整合hibernate validator实现数据验证

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(9180)   2023-03-28 11:29:14

引言

    这里主要讲解在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模块

项目结构图如下:
spring boot项目结果图
项目的依赖文件:
<?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>

 

注意:

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
该模块会自动加载hibernate-validation依赖。不要自己手动配置谨防依赖问题


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进行提交数据验证

第一组测试:

提交全部为空数据:
spring boot validation测试数据1
观察eclipse的控制台输出:
Spring Boot validation 控制台输出1
可以看到非空验证已经实现。

第二组测试:

接下来输入一个非空的名称和密码
spring boot validation测试数据2
观察eclipse控制台:
Spring Boot validation 控制台输出2
可以看到名称的验证错误信息已经没有说明已经输入正确。但是密码却没有通过正则表达式的验证所以报错不合法,在对象上我们设置的密码只能是大写的字母。所以刚才输入的全数字不合法。

第三组测试:

接下来输入正常的密码
spring boot validation测试数据3观察控制台:

Spring Boot validation 控制台输出3
可以看到已经没有错误信息。验证通过
地址:https://www.leftso.com/article/328.html

相关阅读

Spring Boot validation整合hibernate validator实现数据验证,Spring Boot validation使用说明,Spring Boot validat...
项目升级到springboot之后,参数校验的注解报错,经过与原项目对比,发现spring-boot-starter-web的依赖项已经去除了依赖原版会有如下: &lt;dependency&g...
Spring Boot 2.0 hibernate validate 版本冲突导致验证无效,HV000030: No validator could be found for constrain...
通过之前的一些文章spring boot 2.3 hibernate validate框架未引入-左搜 (leftso.com)Spring boot 参数分组校验-左搜 (leftso.com...
Spring boot 参数分组校验项目源码下载:demo-boot-group-validation.zip​​​​​​​ 访问密码:9987分组校验演示项目结构演示项目创建maven主要依赖...
spring boot 1.5整合redis实现spring的缓存框架,spring boot,redis
spring boot RPC 框架 Hessian,本文主要讲解spring boot整合hessian实现Spring boot RPC调用和Spring boot rpc框架hessian...
Spring Boot 2.0 Redis整合,通过spring boot 2.0整合Redis作为spring缓存框架的实现。