SpringBoot 依赖之Validation

news2024/11/13 10:06:15

Validation

Validation
  • 依赖名称: Validation
  • 功能描述: Bean Validation with Hibernate validator.
  • 使用 Hibernate 验证器进行 Bean 验证。
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

**源码已开源,可以免费下载**
码云gitee: https://gitee.com/CoderChange/springboot-all-dependencies

我们在 IntelliJ IDEA 中创建一个 Spring Boot 项目并使用 Validation 依赖来进行数据验证,可以按照以下步骤进行操作:
写在前面,创建项目这一步几乎每个依赖都有相似点,记住一个通吃全关,重点是理解各个依赖的引入和使用方式,再结合自己的业务场景恰如其分的使用它,才是程序员该做的事情。

1. 创建 Spring Boot 项目

  1. 打开 IntelliJ IDEA 并点击 “New Project”

  2. 选择 “Spring Initializr”,然后点击 “Next”

  3. 填写项目的基本信息

    • Group: com.dependencies
    • Artifact: demo
    • Name: validation
    • Description: validation Demo project for Spring Boot
    • Package name: com.dependencies.validation
    • Packaging: Jar
    • Java: 17
  4. 选择依赖

    • Spring Web
    • Validation
  5. 点击 “Next”,然后点击 “Finish”,等待 IDEA 下载依赖并初始化项目。
    在这里插入图片描述

2. 添加 Validation 依赖

pom.xml 文件中添加 Validation 依赖,项目在创建的时候勾选需要的依赖,都会自动生成下面的依赖配置xml:

<properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</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>

3. 创建数据模型类User

创建一个简单的数据模型类 User,并使用注解进行数据验证:

package com.dependencies.validation.model;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

/**
 * @author zhizhou   2024/7/28 15:46
 */
public class User {
    
    @NotNull(message = "id不能为null")
    private Integer id;
    
    @NotBlank(message = "姓名不能为空")
    @Size(min = 2, max = 30, message = "姓名长度必须在2到30个字符之间")
    private String name;
    
    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    private String email;
    
    public Integer getId() {
        return id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getEmail() {
        return email;
    }
    
    public void setEmail(String email) {
        this.email = email;
    }
}

4. 创建控制器类UserController

创建一个控制器类 UserController,处理 HTTP 请求并进行数据验证:

package com.dependencies.validation.controller;

import com.dependencies.validation.model.User;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * @author zhizhou   2024/7/28 15:45
 */
@RestController
@RequestMapping("/users")
@Validated
public class UserController {
    
    @PostMapping
    public ResponseEntity<String> createUser(@Valid @RequestBody User user) {
        //这里通常你可以定制逻辑 保存用户信息导数据库 咱就不延展了 重点看validation功能
        return ResponseEntity.ok("User is valid");
    }
    
    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable @Min(119) Integer id) {
        // 这里咱们就下发一个demo数据好了
        User user = new User();
        user.setId(id);
        user.setName("ZhiZhou");
        user.setEmail("ZhiZhou@iamcoder.com");
        return ResponseEntity.ok(user);
    }
}

5. 全局异常处理 GlobalExceptionHandler

为了处理验证错误并返回友好的错误信息,可以创建一个全局异常处理类:

package com.dependencies.validation.exception;

import jakarta.validation.ConstraintViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

/**
 * @author zhizhou   2024/7/28 15:51
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
    
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException e) {
        Map<String, String> errors = new HashMap<>();
        e.getBindingResult().getAllErrors().forEach(error -> {
            String fieldName = ((FieldError) error).getField();
            String errorMessage = error.getDefaultMessage();
            errors.put(fieldName, errorMessage);
        });
        return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
    }
    
    @ExceptionHandler(ConstraintViolationException.class)
    public ResponseEntity<Map<String, String>> handleConstraintViolationException(ConstraintViolationException e) {
        Map<String, String> errors = new HashMap<>();
        e.getConstraintViolations().forEach(violation -> {
            String fieldName = violation.getPropertyPath().toString();
            String errorMessage = violation.getMessage();
            errors.put(fieldName, errorMessage);
        });
        return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
    }
}

6. 启动项目

在 IntelliJ IDEA 中,右键点击主类(通常是带有 @SpringBootApplication 注解的类),选择 “Run”“Debug”。项目启动后,可以使用 Postman 或 curl 进行 HTTP 请求测试,验证数据验证功能。

示例请求

创建用户

在这里插入图片描述
在这里插入图片描述
校验注解@Validated 和 @Min的实际执行效果,对于代码管理也是很不错的实践方式。
在这里插入图片描述

通过上述步骤,我们可以在 IDEA 中成功创建一个 Spring Boot 项目,并且使用 Validation 依赖进行数据验证。Validation 依赖简化了数据验证逻辑,并提供了强大的验证功能,适合各种数据验证场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1970591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

适用于 Mac 和 Windows 电脑的九大数据恢复软件

你们中的一些人肯定经历过由于计算机意外删除、系统崩溃、格式化、病毒攻击等而导致的严重数据丢失。 感觉不一样&#xff1f; 不用担心&#xff0c;使用数据恢复软件可以找回已删除或丢失的文件。 适用于 Mac 和 Windows 电脑的九大数据恢复软件 这里我们收集了大多数用户对…

好家伙,路由器也会中暑,你信吗?

前言 盛夏已经来很久了&#xff0c;这几天广州的天气就像女朋友&#xff0c;说变脸就变脸…… 一会儿下雨&#xff0c;一会儿又是热情满满的大晴天&#xff01; 伴随着这一切来的就是热、很热、闷热&#xff01; 感觉在阳光底下晒个2秒&#xff0c;整个人就会融化消失。 就…

RabbitMQ知识总结(工作模式)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 工作模式 简单模式 一个生产者对应一个消费者&#xff0c;通过队…

预测未来 | MATLAB实现RF随机森林多变量时间序列预测未来-预测新数据

预测未来 | MATLAB实现RF随机森林多变量时间序列预测未来-预测新数据 预测效果 基本介绍 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法。如果用图来表示他们之间的关系如下: 随机森林是由很多决策树构成的,不同决策树之间没有关联。当我们进行…

基于raid10的Fastdfs HA搭建

1. Fastdfs HA原理 - Fastdfs引入Tracker以支持文件操作的负载均衡调度 - Fastdfs引入基于group分组的storage以支持类似raid10模式的高可靠高性能的存储 - Fastdfs引入fastdfs-nginx-module 可以重定向文件连接到文件上传时的源服务器取文件,避免客户端由于复制延迟导致的文…

揭秘线性代数秩的奥秘:从理论到机器学习的跨越

一、线性代数中的秩&#xff1a;定义与性质 1.1 定义 在线性代数中&#xff0c;秩是一个核心概念&#xff0c;用于描述矩阵或向量组的复杂性和独立性。具体而言&#xff0c;一个矩阵的秩定义为该矩阵中非零子式的最高阶数&#xff0c;而一个向量组的秩则是其最大无关组所含的…

图像分割与图像(目标)监测

图像分割与图像&#xff08;目标&#xff09;监测 图片来自于1.语义分割与实例分割概述_哔哩哔哩_bilibili 图像监测与图像分割是计算机视觉领域的两个重要应用&#xff0c;它们在众多领域如医疗影像分析、遥感图像处理、自动驾驶车辆等都扮演着关键角色。 下面将详细介绍这两…

字符设备驱动开发基础—静态/动态注册设备号,使用cdev注册驱动

文章目录 主次设备号介绍主设备号 (Major Number)次设备号 (Minor Number)设备号的表示与注册设备号的获取设备号的注册 设备文件的创建实际应用中的主次设备号 cdev 结构体介绍cdev 结构体主要字段 使用 cdev 结构体的步骤file_operations 结构体 静态注册设备号示例代码&…

商业银行国际结算规模创新高,合合信息AI助力金融行业智能处理多版式文档

随着我国外贸新业态的快速增长&#xff0c;银行国际结算业务在服务实体经济发展、促进贸易投资便利化进程中发挥了越来越重要的作用。根据中国银行业协会近日发布的《中国贸易金融行业发展报告&#xff08;2023—2024&#xff09;》&#xff0c;2023年我国主要商业银行国际结算…

【征求意见】同济大学--城镇给水厂碳排放核算与评价方法

城镇给水厂保障城镇居民正常生活&#xff0c;是社会经济良性发展的重要基础性设施&#xff0c;对于我国双碳战略目标的实现至关重要。 随着城镇化的发展&#xff0c;城镇供水量不断升高&#xff0c;加上 水资源与生态环境问题不断涌现&#xff0c;人们对水的安全和品质的需求日…

关于在局域网如何避免内网IP被占用的问题

目录 前言 1.使用ipconfig命令 2.排查IP是否被占用&#xff0c;使用ping命令。 3.ip地址冲突&#xff0c;无法访问网站怎么办&#xff1f; 4.怎么避免重启再次出现IP冲突问题&#xff1f; 前言 在一些小型的公司&#xff0c;IP地址没有被规划好&#xff0c;每个人都是通过动…

基于 Rough.js 的 Vue 散点图绘制

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于 Rough.js 的 Vue 散点图绘制 应用场景 本代码展示了如何使用 Rough.js 库在 Vue 应用程序中绘制散点图。Rough.js 是一个轻量级 JavaScript 库&#xff0c;用于创建具有手绘风格的可视化效果。散点图是一…

c++学习笔记—内存概念

c学习笔记 Bit含义用途特点 字节含义用途特点注意事项 c内存基本概念1. 栈&#xff08;Stack&#xff09;2. 堆&#xff08;Heap&#xff09;3. 全局/静态存储区4. 常量存储区5. 内存管理关键字和函数6. 内存泄漏7. 指针和引用8. 虚拟内存9. 内存对齐10. 构造和析构 c中基本数据…

用神经网络求解方案

在处理密集、计算量大的数学问题时&#xff0c;计算机系统一直是人类最好的朋友。从计算器上的简单计算到 R 中的大型统计运算&#xff0c;这一技术前沿使我们很多人的生活变得更加轻松。 然而&#xff0c;即使是计算机&#xff0c;当数字变成字母并开始涉及代数时&#xff0c…

微信公众号使用介绍

写在前面&#xff0c;楼下有个医生小姐姐想做个公众号&#xff0c;整理了一份文档入门用 一 订阅号和服务号区别 1.1 关于功能上的差异 订阅号&#xff08;Subscription Account&#xff09; 定位&#xff1a;主要用于提供信息传播和互动&#xff0c;适合媒体、个人博主、机…

一文全面了解HPC高性能计算平台是什么、怎么选型?高性能计算平台CHPC 都能做什么?

一. 概述 随着技术的发展和数据量的爆炸性增长&#xff0c;企业面临的挑战日益复杂&#xff0c;对计算能力的需求也在不断增加。这些问题的解决超出了传统计算方法的能力范围&#xff0c;高性能计算&#xff08;HPC&#xff09;正是为解决这类问题而生。 高性能计算&#xff…

【Linux】Linux下的日志(日常级)

日志是日后工作中非常重要的一部分&#xff0c;现在写一份简单的日志项目可以帮助我们熟悉并理解原理。 目录 设计思路&#xff1a;一些实现细节&#xff1a;代码&#xff1a;日志的使用方法&#xff1a; 设计思路&#xff1a; 图示是我们的最终目的。 设计一个类&#xff0…

是否掌握数据结构对于IT职业发展至关重要?

算法跟代码实现有时候是两回事&#xff0c;在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「数据结构的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#…

Cesium 限高分析

Cesium 限高分析 原理&#xff1a;ClassificationPrimitive贴模型的运用 效果图

兼容性最好的模拟器,主要为高端平板设计

一、简介 1、蓝叠安卓模拟器是BlueStacks公司推出的全球知名Android模拟器。它可能是兼容性最好的模拟器&#xff0c;主要为高端平板设计&#xff0c;加入了图形硬件加速&#xff0c;并与AMD合作。 二、下载 1、文末有下载链接,不明白可以私聊我哈&#xff08;麻烦咚咚咚&#…