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

所属分类: 软件编程 / java 阅读数: 1946
收藏 0 赞 0 分享

两者区别


@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 boot 静态资源处理方法

本篇文章主要介绍了spring boot 静态资源处理方法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解spring boot 使用application.properties 进行外部配置

这篇文章主要介绍了详解spring boot 使用application.properties 进行外部配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Java实现分页的前台页面和后台代码

这篇文章主要为大家详细介绍了Java实现分页的前台页面和后台代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解spring面向切面aop拦截器

spring中有很多概念和名词,比如过滤器、拦截器、aop等。这篇文章主要介绍了详解spring面向切面aop拦截器,有兴趣的可以了解一下。
收藏 0 赞 0 分享

Java easyui树形表格TreeGrid的实现代码

这篇文章主要为大家详细介绍了Java easyui树形表格TreeGrid的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java的NIO与IO的详解及对比

这篇文章主要介绍了Java的NIO与IO的详解及对比的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java中网络IO的实现方式(BIO、NIO、AIO)介绍

这篇文章主要介绍了Java中网络IO的实现方式(BIO、NIO、AIO)介绍的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 敏感信息加密处理

本文主要介绍了Java 敏感信息加密处理的相关知识:1)敏感信息加密处理我们要实现什么;2)敏感信息加密处理我做了些什么;3)敏感信息加密实现方法。具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享

详解使用Spring3 实现用户登录以及权限认证

这篇文章主要介绍了详解使用Spring3 实现用户登录以及权限认证,这里整理了详细的代码,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

Java的内存机制详解

本文主要介绍了Java的内存机制的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享
查看更多