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;
  }
}

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

(0)

相关推荐

  • springmvc的@Validated注解使用

    1. 校验的错误信息, 可以直接在bean属性上配置, 也可以在properties中配置. 2. 将校验器bean配置到注解驱动上 3. 在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息 注意:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后). 使用validated所需配置: 1. jar包 2. application.

  • Spring @Valid @Validated实现验证

    对于属性的验证有如下一些注解 @NotBlank:只用在String上,值不能为null,并且trim后长度大于零.不为null,不是全为空格的字符串 @NotNull: 不能为null,但可以是长度为零的字符串 @NotEmpty: 不能为null,长度大于零 @Null:必须为null @Min(value): 数字,值必须大于等于指定的值 @Max(value): 数字,值必须小雨等于指定的值 @DecimalMin(value): 数字,值必须大于等于指定的值 @DecimalMax(v

  • 使用SpringMVC的@Validated注解验证的实现

    1.SpringMVC验证@Validated的使用 第一步:编写国际化消息资源文件 编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制 edit.username.null=用户名不能为空 edit.password.size=密码最少{min}位,最长{max}位 ...... 可以将edit.username.null与edit.password.size看为参数,在message中传递,具体请看第二步. 第二步:Bean实体类中加注解

  • Springboot使用@Valid 和AOP做参数校验及日志输出问题

    项目背景 最近在项目上对接前端的的时候遇到了几个问题 1.经常要问前端要请求参数 2.要根据请求参数写大量if...else,代码散步在 Controller 中,影响代码质量 3.为了解决问题1,到处记日志,导致到处改代码 解决方案 为了解决这类问题,我使用了@Valid 做参数校验,并使用AOP记录前端请求日志 1.Bean实体类增加注解 对要校验的实体类增加注解,如果实体类中有List结构,就在List上加@Valid @Valid注解 注解 备注 @Null 只能为null @NotNu

  • springboot validator枚举值校验功能实现

    这篇文章主要介绍了springboot validator枚举值校验功能实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.前言 在spring项目中,校验参数功能使用hibernate validator是一个不错的选择,我们的项目中也是使用它来进行校验的,省去了很多难看的校验逻辑,使代码的可读性也大大增加,本章将带你使用hibernate validator自定义注解功能实现一个 枚举值校验的逻辑. 二.需求 我们先明确下我们的需求,在

  • 详解Spring 参数验证@Validated和@Valid的区别

    Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR-303 的一个变种),javax提供了@Valid(标准JSR-303规范),配合 BindingResult 可以直接提供参数验证结果.其中对于字段的特定验证注解比如 @NotNull 等网上到处都有,这里不详述 在检验 Controller 的入参是否符合规范时,使用 @Validated 或者 @Valid 在基本验证功能上没有太多区别.但是在分组.

  • SpringMVC实现Validation校验过程详解

    这篇文章主要介绍了SpringMVC实现Validation校验过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.概述 对前端的校验大多数通过js在页面校验,这种方法比较简单,如果对安全性考虑,还要在后台校验. springmvc使用JSR-303(javaEE6规范的一部分)校验规范,springmvc使用的是Hibernate Validator(和Hibernate的ORM) 二.步骤 2.1 引入 Hibernate Vali

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

    两者区别 @Valid @Validated 标准 标准JSR-303规范 增强JSR-303规范 包 javax.validation org.springframework.validation 验证结果 BindingResult result BindingResult result 分组支持 不支持 支持 分组序列 不支持 支持 类型注解 ? 支持 方法注解 支持 支持 方法参数注解 支持 支持 构造函数注解 支持 ? 成员属性注解 支持 不支持 嵌套验证 支持 不支持 分组示例 pu

  • JavaScript中callee和caller的区别与用法实例分析

    本文实例讲述了JavaScript中callee和caller的区别与用法.分享给大家供大家参考,具体如下: 1.callee 在函数的内部,有两个特殊的对象:arguments和this.其中arguments是一个类似数组的对象,包含着传入函数的所有参数. 虽然arguments的主要用途是保存函数参数,但这个对象有一个属性--callee,该属性是一个指针,指向拥有这个arguments对象的函数 所以callee的作用就是来指向当前对象 看一个阶层函数的例子就会明白他的用途了: /* *

  • js中apply()和call()的区别与用法实例分析

    本文实例讲述了js中apply()和call()的区别与用法.分享给大家供大家参考,具体如下: 每个函数都包括两个非继承而来的方法:apply()和call().两者用途都是在特定的作用域中调用函数,等于重新设置了函数体内this对象的值. 两者区别仅在于接收参数方式不同,apply()第一个参数是调用apply的函数运行的作用域,的第二个参数可以是Array的实例(数组),也可以是arguments对象,call()第一个参数是this的值没有变化,而其余参数都直接传递给函数(也就是逐个列举出

  • JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析

    本文实例讲述了JS中类的静态方法,静态变量,实例方法,实例变量区别与用法.分享给大家供大家参考,具体如下: 1.类的静态方法 先来段代码之后分析 // JS类静态函数 function BaseClass() { } // 类添加add函数 BaseClass.add = function() { console.log("BaseClass add()方法被调用"); }; // 类方法(类的静态函数)直接调用 // 类名.类方法名 BaseClass.add(); //BaseCl

  • JS中for,for...in,for...of和forEach的区别和用法实例

    for循环 基本语法格式: for(初始化变量;条件表达式;操作表达式){              循环体语句;     } 普通for循环在Array和Object中都可以使用.for循环中可以使用return.break等来中断循环. //遍历数组 var arr = [1,2,3,4,5]; for(var i=0;i<arr.length;i++){ console.log(arr[i]); } //遍历对象 var obj={ x0:10, x1:20, x2:30 } for(va

  • python中sort()和sorted()的区别及用法实例

    目录 一. 二. python中输入字符串转列表的注意问题 总结 本文主要讲sort与sorted的主要区别,以便正确使用 一. sort()只能用于列表:sorted()可以用于所有可迭代对象: 比如: str_a = "blue" print(sorted(str_a)) >>>['b', 'e', 'l', 'u'] 二. sort()对列表排序是进行原处排序,并不会返回新的列表: sorted()排序后会返回一个新的列表: 比如: 对于sort()来说: li

  • Java中Validated、Valid 、Validator区别详解

    目录 1. 结论先出 JSR 380 Valid VS Validated 不同点? Validator 2. @Valid和​​​​​​​@Validated 注解 3. 例子 4.使用@Valid嵌套校验 5. 组合使用@Valid和@Validated 进行集合校验 6. 自定义校验 自定义约束注解 工作原理 结论 参考链接: 1. 结论先出 Valid VS Validated 相同点 都可以对方法和参数进行校验 @Valid和@Validated 两种注释都会导致应用标准Bean验证.

  • 详解Spring中@Valid和@Validated注解用法

    目录 案例引入 @Valid 详解 @Validated 详解 @Valid 和 @Validated 比较 案例引入 下面我们以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出 @Valid 和 @Validated 注解用法详解. 那么,首先,我们会有一个员工对象 Employee,如下 : /** * 员工对象 * * @author sunnyzyq * @since 2019/12/13 */ public class Employee { /** 姓名 */ public St

  • spring注解之@Valid和@Validated的区分总结

    目录 @Valid: @Validated: 1.分组 2.组序列 3.验证多个对象 补充:主要区别 总结 @Valid: @Valid注解用于校验,所属包为:javax.validation.Valid. ① 首先需要在实体类的相应字段上添加用于充当校验条件的注解,如:@Min,如下代码(age属于Girl类中的属性): @Min(value = 18,message = "未成年禁止入内") private Integer age; ② 其次在controller层的方法的要校验的

  • Spring Security CsrfFilter过滤器用法实例

    这篇文章主要介绍了Spring Security CsrfFilter过滤器用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 spring security框架提供的默认登录页面,会有一个name属性值为_csrf的隐藏域: 这是框架在用户访问登录页面之前就生成的,保存在内存中,当用户提交表单的时候会跟着一起提交:_csrf_formdata 然后会经过spring security框架resources目录下配置文件spring-sec

随机推荐