@Valid 和 @Validated 注解使用和区别

概述

这两个注解的作用都是简化 校验

@Valid

Spring 注解

Maven 依赖

如果是springboot项目,这个依赖存在于web开发包里面,如下

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.0.5.RELEASE</version>
</dependency>

如果不是springboot项目,则需要引入下述依赖

<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version>
</dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.4.1.Final</version>
</dependency>

使用

在Controller 对应方法上,参数前面加上 @Valid 注解,表示我们对这个对象属性需要进行验证,如下

@PostMapping(value = "/add")@Updatepublic void add(@RequestBody @Valid User user, BindingResult bindingResult) {// 新增操作}

User:需要验证的对象熟悉,类属性如下

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;@Data
public class Employee {/** 姓名 */@NotBlank(message = "请输入名称")@Length(message = "名称不能超过个 {max} 字符", max = 10)public String name;/** 年龄 */@NotNull(message = "请输入年龄")@Range(message = "年龄范围为 {min} 到 {max} 之间", min = 1, max = 100)public Integer age;}

BindingResult:存放验证结果,对验证结果的使用如下

@PostMapping(value = "/add")@Updatepublic String add(@RequestBody @Valid User user, BindingResult bindingResult) {// 新增操作if (bindingResult.hasErrors()){// 验证有误,返回第一条错误信息return bindingResult.getAllErrors().get(0).gtetDefaultMessage();}return "新增成功";}

@Validated

@Validated 是在 @Valid 基础上,做的一个升级版

在使用 @Valid 进行验证的时候,我们需要用一个对象去接收校验结果,最后根据校验结果判断,从而提示用户

而 如果在 校验的对象前面添加上 @Validated 注解,则不需要那个对象去接收 校验结果

@PostMapping(value = "/add")@Updatepublic void add(@RequestBody @Validated User user) {// 新增操作}

但是会直接报错404,需要通过捕获异常的方式,将该异常进行捕获

  1. 创建一个校验异常捕获类 ValidExceptionHandler ,
  2. 然后打上 @RestControllerAdvice 注解,该注解表示他会去抓所有 @Controller 标记类的异常,
  3. 并在异常处理后返回以 JSON 或字符串的格式响应前端
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;@RestControllerAdvice
public class ValidExceptionHandler {@ExceptionHandler(BindException.class)public String validExceptionHandler(BindException exception) {return exception.getAllErrors().get(0).getDefaultMessage();}}

二者对比

第一点:@Valid 进行校验的时候,需要用 BindingResult 来做一个校验结果接收。当校验不通过的时候,如果手动不 return ,则并不会阻止程序的执行

第二点:@Validated 使用起来要比 @Valid 方便一些,它可以帮我们节省一定的代码,并且使得方法看上去更加的简洁

第三点: 两者都可以对数据进行校验,待校验字段上打的规则注解(@NotNull, @NotEmpty等)都可以对 @Valid 和 @Validated 生效

第四点:@Validated 进行校验的时候,当校验不通过的时候,程序会抛出400异常,阻止方法中的代码执行,这时需要再写一个全局校验异常捕获处理类,然后返回校验提示

具体的注解使用:博客

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

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

相关文章

【busybox记录】【shell指令】expand

目录 内容来源&#xff1a; 【GUN】【expand】指令介绍 【busybox】【expand】指令介绍 【linux】【expand】指令介绍 使用示例&#xff1a; 把制表符转化为空格 - 默认输出 把制表符转化为空格 - 修改制表符转空格的个数 把制表符转化为空格 - 修改制表符转空格的个数…

四川易点慧电子商务抖音小店:潜力无限的新零售风口

在当今数字化浪潮中&#xff0c;电子商务已经成为推动经济发展的重要引擎。四川易点慧电子商务有限公司凭借其敏锐的市场洞察力和创新精神&#xff0c;成功在抖音小店这一新兴平台上开辟出一片新天地。本文将探讨四川易点慧电子商务抖音小店的潜力及其在新零售领域的影响力。 一…

多C段的美国站群服务器有什么用途?

多C段的美国站群服务器有什么用途? 多C段的美国站群服务器是一种常见的网络运营策略&#xff0c;其用途主要体现在以下几个方面&#xff1a; 多C段的美国站群服务器有什么用途? 1. 提高站点排名和流量 部署多个站点在不同的C段IP地址上&#xff0c;可以通过不同的IP地址发布…

OpenGrok使用

以前都是用的find&#xff0c;或者VScode里面的浏览&#xff0c;但是到了Android这个就不行了&#xff0c;代码太多了。都在用OpenGrok&#xff0c;所以俺也用一下。 这里有两个步骤&#xff0c;一个是安装&#xff0c;是一个使用。 1 安装 大概看了一下&#xff0c;安装是to…

关于Clion开发stm32printf重定向问题简单解决问题方法

title: 关于Clion开发stm32printf重定向问题简单解决问题方法 tags: STM32Clion 参考来源1 这是另一种方法 在printf 重定向的基础上加上 一句 setbuf(stdout,NULL); 参考来源2 自己写的笔记啦

小语言模型的潜力

想象一下这样一个世界&#xff1a;智能助手不在云端&#xff0c;而是在你的手机上&#xff0c;无缝了解你的需求并以闪电般的速度做出响应。这不是科幻小说&#xff0c;而是科幻小说。这是小语​​言模型 (SLM) 的希望&#xff0c;这是一个快速发展的领域&#xff0c;有可能改变…

【一起深度学习——批量规范化】

批量规范化 1、为啥要批量规范化呢&#xff1f;2、如何批量规范化呢&#xff1f;3、实现批量归一化。4、定义BatchNorm层&#xff1a;5、定义神经网络&#xff1a;6、开始训练&#xff1a; 1、为啥要批量规范化呢&#xff1f; 1、可持续加速深层网络的收敛速度。 2、对于深层网…

罗德与施瓦茨 SMC100A信号发生器9kHz至3.2 GHz

罗德与施瓦茨 SMC100A信号发生器&#xff0c;9 kHz - 3.2 GHz 罗德与施瓦茨 SMC100A 以极具吸引力的价格提供出色的信号质量。它覆盖的频率范围为 9 kHz 至 1.1 GHz 或 3.2 GHz。输出功率为典型值。> 17 dBm。所有重要功能&#xff08;AM/FM/φM/脉冲调制&#xff09;均已集…

代码随想录算法训练营第六十天| 647. 回文子串,516.最长回文子序列,动态规划总结篇

题目与题解 参考资料&#xff1a;动态规划总结篇 647. 回文子串 题目链接&#xff1a;647. 回文子串 代码随想录题解&#xff1a;647. 回文子串 视频讲解&#xff1a;动态规划&#xff0c;字符串性质决定了DP数组的定义 | LeetCode&#xff1a;647.回文子串_哔哩哔哩_bilibili …

【Camera2完整流程分析三】从Log角度跟踪分析原生Camera2相机分析相机拍照流程

一,概述 通过阅读本篇文件后,你会了解到原生Camera2的从app层到framework,再到camera service层,最后到Hal3层的完整代码架构和代码流程。学习本篇文章后可以对拍照take picture快速上手,并能通过log跟踪来快速分析和定位问题,具体知识点的如下: 1,Camera2在app层摄像…

【busybox记录】【shell指令】unexpand

目录 内容来源&#xff1a; 【GUN】【unexpand】指令介绍 【busybox】【unexpand】指令介绍 【linux】【unexpand】指令介绍 使用示例&#xff1a; 空格转化成制表符 - 默认输出 空格转化成制表符 - 转换所有的空格 空格转化成制表符 - 指定制表位 常用组合指令&#…

项目提交到空的git仓库流程

流程&#xff1a; # 初始化 Git 仓库 git init # 如果遇到 "detected dubious ownership" 的错误&#xff0c;可以添加 safe.directory 配置以解决 git config --global --add safe.directory T:/project/heima-leadnews # 将当前目录下的所有文件添加到 Git 暂存区…

构造照亮世界——快速沃尔什变换 (FWT)

博客园 我的博客 快速沃尔什变换解决的卷积问题 快速沃尔什变换&#xff08;FWT&#xff09;是解决这样一类卷积问题&#xff1a; ci∑ij⊙kajbkc_i\sum_{ij\odot k}a_jb_k ci​ij⊙k∑​aj​bk​其中&#xff0c;⊙\odot⊙ 是位运算的一种。举个例子&#xff0c;给定数列 a,…

MATLAB基础应用精讲-【数模应用】非参数检验(附python、MATLAB和R语言代码实现)

目录 几个相关概念 算法原理 什么是非参数检验 何时使用非参数检验

腾讯安全客户端(电脑管家部门)一面

上来介绍部门&#xff0c;之后自我介绍 说了是个喜欢每天都学点新东西的人&#xff0c;然后平常也会在课余时间之外去做点项目方面的学习&#xff0c;比如Web项目做出来就是因为兴趣。喜欢结构性的东西&#xff0c;有一门课叫电路电子学一次考试是专业第二。其他也都还可以&am…

微信小程序交互增强:实现上拉加载、下拉刷新与一键返回顶部【代码示例】

微信小程序交互增强&#xff1a;实现上拉加载、下拉刷新与一键返回顶部【代码示例】 基础概念实现步骤与代码示例1. 下拉刷新2. 上拉加载更多3. 返回顶部 性能优化与安全考虑结语与讨论 在微信小程序的开发过程中&#xff0c;提供流畅的用户体验至关重要&#xff0c;其中上拉加…

小米手机miui14 android chrome如何取消网页自动打开app

搜索媒体打开应用 选择你要阻止打开的app&#xff0c;以github为例 取消勾选打开支持的链接。 参考&#xff1a;https://www.reddit.com/r/chrome/s/JBsGkZDkRZ

创建禁止操作区域并且添加水印

css 设置 &#xff1a; 引用换成自己就好 .overlay {z-index: 1000;cursor: none; /*设置为不可点击*/user-select: none; /*设置为不可选择*/contenteditable: false; /*设置为不可编辑*/draggable: false; /*设置为不可拖动*/position: absolute;top: 0;left: 0;width: 100…

git bash退出vim编译模式

解决方法&#xff1a; 1.按esc键&#xff08;回到命令模式&#xff09; 此时是没有分号让我们在后面输入命令的 2.按shift键: 3.再输入&#xff1a;wq&#xff0c;并按enter键 此时我们发现又回到git bash窗口 希望对大家有所帮助&#xff01;

JavaScript学习—网络请求

在 JavaScript 中&#xff0c;XMLHttpRequest 对象是一个用于与服务器交换数据的接口&#xff0c;允许在后台与服务器进行异步通信。这使得网页可以在不中断用户交互的情况下从服务器请求数据。 方法 open()&#xff1a;用于设置请求的类型、URL和是否异步处理请求。 var xhr …