Spring @Valid和@Validated区别和用法实例

 更新时间:2020年04月27日 11:17:53   作者:小伍2013  
这篇文章主要介绍了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; 
  } 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 学习Java之如何对时间进行格式化

    学习Java之如何对时间进行格式化

    当我们在默认情况下构造出来的时间对象,它的时间格式并不适合我们阅读,并且在开发时,pc端、Android端、iOS端等展示的时间格式可能也并不完全一样,本文就从这几个问题给大家介绍如何对时间进行格式化,感兴趣的同学可以借鉴一下
    2023-05-05
  • Java数据结构之二叉搜索树详解

    Java数据结构之二叉搜索树详解

    二叉搜索树作为一个经典的数据结构,具有链表的快速插入与删除的特点,同时查询效率也很优秀,所以应用十分广泛。本文将详细讲讲二叉搜索树的原理与实现,需要的可以参考一下
    2022-06-06
  • 详解Spring Boot工程集成全局唯一ID生成器 UidGenerator的操作步骤

    详解Spring Boot工程集成全局唯一ID生成器 UidGenerator的操作步骤

    本文就在项目中来集成 UidGenerator这一工程来作为项目的全局唯一 ID生成器。接下来通过实例代码给大家详解详解Spring Boot工程集成全局唯一ID生成器 UidGenerator的操作步骤,感兴趣的朋友一起看看吧
    2018-10-10
  • 谈谈变量命名规范的重要性

    谈谈变量命名规范的重要性

    下面小编就为大家带来一篇谈谈变量命名规范的重要性。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • ZooKeeper入门教程二在单机和集群环境下的安装搭建及使用

    ZooKeeper入门教程二在单机和集群环境下的安装搭建及使用

    本文是ZooKeeper入门系列教程,涵盖ZooKeeper的安装使及单机集群环境搭建,通过实例和大量图表,结合实战,帮助学习者理解和运用,有需要的朋友可以借鉴参考下
    2022-01-01
  • Java多例设计模式实例详解

    Java多例设计模式实例详解

    这篇文章主要介绍了Java多例设计模式,结合实例形式分析了基于Java的多例模式概念、原理、定义与使用方法,需要的朋友可以参考下
    2018-05-05
  • Tomcat ClassLoader打破双亲委派源码解析

    Tomcat ClassLoader打破双亲委派源码解析

    这篇文章主要为大家介绍了Tomcat ClassLoader打破双亲委派源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • JAVA重复调用接口导致数据不一致的问题解决

    JAVA重复调用接口导致数据不一致的问题解决

    在使用JAVA进行开发时,我们经常会遇到要调用接口来获取数据的情况,本文主要介绍了JAVA重复调用接口导致数据不一致的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Mybatis Plus 中的LambdaQueryWrapper示例详解

    Mybatis Plus 中的LambdaQueryWrapper示例详解

    这篇文章主要介绍了Mybatis Plus 中的LambdaQueryWrapper,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Mybatis 中的sql批量修改方法实现

    Mybatis 中的sql批量修改方法实现

    在项目中遇到需要批量更新的功能,原本想的是在Java中用循环访问数据库去更新,但是心里总觉得这样做会不会太频繁了,太耗费资源了,效率也很低,查了下mybatis的批量操作,原来确实有<foreach>标签可以做到,下面通过本文给大家介绍下
    2017-01-01

最新评论