Spring @Valid 和 @Validated 的区别和使用
两者区别
| @Valid | @Validated | |
|---|---|---|
| 标准 | 标准JSR-303规范 | 增强JSR-303规范 |
| 包 | javax.validation | org.springframework.validation |
| 验证结果 | BindingResult result | BindingResult result |
| 分组支持 | 不支持 | 支持 |
| 分组序列 | 不支持 | 支持 |
| 类型注解 | ? | 支持 |
| 方法注解 | 支持 | 支持 |
| 方法参数注解 | 支持 | 支持 |
| 构造函数注解 | 支持 | ? |
| 成员属性注解 | 支持 | 不支持 |
| 嵌套验证 | 支持 | 不支持 |
分组示例
public interface First{}
public interface Second{}
public class User {
// 所有都验证
@NotNull(message = "...")
private int id;
// First 才验证
@NotNull(message = "...", groups = { First.class })
private String username;
// First 或 Second 才验证
@NotNull(message = "...", groups = { First.class, Second.class })
private String content;
// First 验证 NotEmpty,Second 验证 Size
@NotEmpty(message = "...", groups = { First.class })
@Size(message = "...", min = 3, max = 8, groups = { Second.class })
private String height;
}
// 只验证 Second 分组和没有分组的属性
public String save(@Validated( { Second.class }) User user, BindingResult result) {
if (result.hasErrors()) {
return "validate/error";
}
return "redirect:/success";
}
分组序列
public interface GroupA {}
public interface GroupB {}
@GroupSequence( { GroupA.class, GroupB.class })
public interface Group {}
public @ResponseBody String save(@Validated({ Group.class }) User user, BindingResult result) {
if(result.hasErrors()) {
return false;
}
return true;
}
嵌套验证
public class Item {
@NotNull(message = "id不能为空")
@Min(value = 1, message = "id必须为正整数")
private Long id;
@Valid
@NotNull(message = "props不能为空")
@Size(min = 1, message = "至少要有一个属性")
private List<Prop> props;
}
public class Prop {
@NotNull(message = "pid不能为空")
@Min(value = 1, message = "pid必须为正整数")
private Long pid;
@NotNull(message = "vid不能为空")
@Min(value = 1, message = "vid必须为正整数")
private Long vid;
@NotBlank(message = "pidName不能为空")
private String pidName;
@NotBlank(message = "vidName不能为空")
private String vidName;
}
@RestController
public class ItemController {
@RequestMapping("/item/add")
public void addItem(@Validated Item item, BindingResult bindingResult) {
doSomething();
}
}
验证多个对象
@Controller
public class PeopleController {
@RequestMapping("/add")
public @ResponseBody String add(@Validated People pp, BindingResult result1, @Validated Person ps, BindingResult result2)
{
if(result1.hasErrors())
{
return false;
}
if(result2.hasErrors())
{
return false;
}
return true;
}
}
Spring @Valid 和 @Validated 的区别和使用的更多相关文章
- Spring中的@Valid 和 @Validated注解你用对了吗
1.概述 本文我们将重点介绍Spring中 @Valid和@Validated注解的区别 . 验证用户输入是否正确是我们应用程序中的常见功能.Spring提供了@Valid和@Validated两个注 ...
- Spring @Valid
@Valid基本用法 强烈推荐如果要学习@Valid JSR303, 建议看这里的API Bean Validation规范 ! Controller控制器中在需要校验的实体类上添加 @Valid ...
- Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法
Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法 1. BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于 ...
- @Valid和@Validated 区别
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...
- spring注解第07课 @Valid和@Validated的总结区分
@Valid: @Valid注解用于校验,所属包为:javax.validation.Valid. ① 首先需要在实体类的相应字段上添加用于充当校验条件的注解,如:@Min,如下代码(age属于Gir ...
- @Valid与@Validated
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...
- springboot @valid与@validated的参数校验使用总结
好久没在这平台写博客了,最近整理了这东西,先给出总结 // @Valid只能用在controller,@Validated可以用在其他被spring管理的类上 // @Valid可以加在成员变量上(本 ...
- spring注解和xml方式区别详解
一.spring常规方式. 在使用注释配置之前,先来回顾一下传统上是如何配置 Bean 并完成 Bean 之间依赖关系的建立.下面是 3 个类,它们分别是 Office.Car 和 Boss,这 3 ...
- spring @Resource和@Autowired的区别
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...
随机推荐
- vue-cli 如何配置assetsPublicPath; vue.config.js如何更改assetsPublicPath配置;
问题: vue项目完成打包上线的时候遇到静态资源找不到的问题,网上很多解决办法都是基于vue-cli 2.x 来解决的,但从vue-cli 3.0以后,便舍弃了配置文件夹(便没有了config这个文件 ...
- 一、手把手教你docker搭建fastDFS文件上传下载服务器
在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker. 1.执 ...
- 全面解析 | 钥匙环服务的应用场景&商业价值
在互联互通的场景驱动下,同一开发者旗下常常拥有多款应用或者多个应用形态,用户在同一设备的不同应用或端口登录时,即便使用同一帐号,仍需要重复输入密码进行验证,操作复杂,直接影响到用户的使用体验,而华为钥 ...
- Java高精度基础+开根
在焦作站的acm网络赛中遇到了一个高精度开根的水题--但是那时候WA了 后面学写java补题还T了orz 所以写一篇文章来记录一下java的大整数类型的基础和开根还有一点心得体会吧 首先给那一题的题面 ...
- 9、Redis五大数据类型---有序集合Zset(sorted set)
一.简介 zset与set异同 相同之处: 都是没有重复元素的字符串集合 不同之处: 有序集合zset的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排 ...
- 3、Linux的Redis安装
Linux下安装redis 1.Redis下载 [Redis官网下载地址](https://redis.io/download) 进入官网进行下载 wget https://download.r ...
- Java实现HttpGet和HttpPost请求
maven引入JSON处理jar <dependency> <groupId>com.alibaba</groupId> <artifactId>fas ...
- CF701A Cards 题解
Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\),试在其中找到 \(\dfrac{n}{2}\) 对数,使得每个数对的元素的和都相等. 数据范围:\(2 ...
- CF1443A Kids Seating 题解
Content 有 \(t\) 组询问,每组询问给定一个数 \(n\),试构造出一个长度为 \(n\) 的数列 \(\{a_i\}_{i=1}^n\),使得: \(\forall i\in[1,n], ...
- 使用django + KindEditor 开发个人博客系统
前奏小知识 1. 通过url参数组合不同的过滤条件 django框架部分 1. 数据结构models from django.db import models # Create your models ...