首页 > 其他分享 >@Valid和@Validated的区别

@Valid和@Validated的区别

时间:2024-11-12 17:32:03浏览次数:1  
标签:验证 区别 Valid 分组 User Validated class

1. @Valid 的使用

@Valid 是 Java Bean Validation 规范(JSR-303/JSR-380)中的标准注解。它用于触发对 Java Bean 的验证。你可以在类的字段上使用验证注解(如 @NotNull, @Size, @Min, @Max 等),然后使用 @Valid 来触发对这些字段的验证。

示例:

java
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.Valid;

public class User {

    @NotNull
    private String name;

    @Size(min = 18)
    private int age;

    // Getters and Setters
}

public class UserRequest {

    @Valid
    private User user;

    // Getters and Setters
}

在这个例子中,UserRequest 类中有一个 User 类型的字段 user,并使用了 @Valid 注解,这样在验证 UserRequest 对象时,Spring 会自动验证 user 字段中 User 类的约束条件。

2. @Validated 的使用

@Validated 是 Spring 提供的一个注解,它扩展了 @Valid,并增加了对分组验证的支持。分组验证允许你根据不同的验证场景,选择不同的验证规则。

分组验证的概念

通过定义验证分组,你可以在不同的情况下执行不同的验证。例如,某些字段在创建时是必填的,而在更新时则可以是可选的。

示例:

  1. 定义验证分组:
java
public interface CreateGroup {}
public interface UpdateGroup {}
  1. 在实体类中使用分组:
java
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class User {

    @NotNull(groups = CreateGroup.class)
    private String name;

    @Size(min = 18, groups = CreateGroup.class)
    private int age;

    @Size(min = 1, groups = UpdateGroup.class)
    private String nickname;

    // Getters and Setters
}
  1. 在控制器中使用 @Validated 和指定分组:
java
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@RestController
public class UserController {

    @PostMapping("/createUser")
    public String createUser(@RequestBody @Validated(CreateGroup.class) User user) {
        // 这里会进行 CreateGroup 组的验证
        return "User created!";
    }

    @PutMapping("/updateUser")
    public String updateUser(@RequestBody @Validated(UpdateGroup.class) User user) {
        // 这里会进行 UpdateGroup 组的验证
        return "User updated!";
    }
}

@Valid@Validated 的区别

  1. 基本功能:

    • @Valid 是 JSR-303/JSR-380 规范的一部分,用于触发验证。
    • @Validated 是 Spring 的扩展,除了触发验证外,还支持验证分组。
  2. 验证分组:

    • @Valid 不支持验证分组,只会按照默认的验证规则进行验证。
    • @Validated 支持验证分组,可以根据不同的验证场景选择不同的验证规则。
  3. 使用场景:

    • 如果你不需要分组验证,只需进行普通的验证,可以使用 @Valid
    • 如果你需要根据不同的业务场景执行不同的验证逻辑,则可以使用 @Validated 配合分组。

总结:

  • @Valid:标准的 Bean Validation 注解,适用于一般的验证场景。
  • @Validated:Spring 提供的扩展,支持验证分组,适用于需要分组验证的场景。

在大多数简单的应用中,@Valid 足以满足需求。但是如果你需要根据不同的请求场景(如创建和更新)进行不同的验证,@Validated 将更加灵活。

标签:验证,区别,Valid,分组,User,Validated,class
From: https://www.cnblogs.com/starfish29/p/18542325

相关文章

  • 驱动钛丝(SMA)的可靠性设计(2)不同厂家生产的钛丝有什么区别
    前言形状记忆合金(Shapememoryalloy,SMA),也叫形态记忆合金、镍钛记忆合金,它是由TI(钛)-IN(镍)材料组成,这里我们方便描述,简称钛丝或者驱动钛丝。第2节 不同厂家生产的钛丝有什么区别目前全球的钛丝生产厂家,同样规格的钛丝特性都不同,选择合适自己产品的钛丝至关重要,我们需要检......
  • 为什么要使用克隆?如何实现对象克隆?深拷贝和浅拷贝区别是什么
    有时需要复制一个对象,并且希望保留原有的对象进行接下来的操作。这时就需要使用克隆。如何实现对象克隆?实现Cloneable接口并重写clone方法:实现​​Cloneable​​接口后,可以调用​​Object.clone()​​方法来创建一个新的对象。通过序列化和反序列化实现深克隆:将对象转......
  • 代码静态测试工具Klocwork 2024.3新版发布:Validate平台改进编码标准CC++
    Klocwork2024.3为C/C++分析引擎和构建上传流程引入了新功能和性能改进。此版本还附带了增强的安全性和用户体验改进,包括用于SAML/OIDC身份验证的IDE插件中更好的用户身份验证工作流程。其他增强功能包括更广泛的编码标准覆盖范围以及改进的与Bazel构建系统的集成。Vali......
  • NVR接入录像回放平台EasyCVR视频分析设备平台视频监控热知识分享:2.4G和5G的路由器区别
    在当今数字化时代,无线网络已成为我们生活中不可或缺的一部分,而无线路由器作为连接数字世界的关键设备,其性能和功能直接影响着我们的网络体验。随着技术的发展,用户对无线路由器的需求不再仅限于基本的联网功能,而是开始追求更高速、更稳定、更安全的网络服务。同时,对于安防视频监控......
  • JDK、JRE、JVM之间的区别
     JVM(JavaVirtualMachine,Java虚拟机):-JVM是Java程序的运行平台,它是一种抽象化的计算机,可以将编译后的Java字节码(.class文件)转换为特定操作系统能够执行的机器码。它负责管理内存分配、垃圾回收、线程管理等底层服务,使得Java具有“一次编写,到处运行”的跨平台能力。JRE......
  • JDK、JRE、JVM之间的区别
     JVM(JavaVirtualMachine,Java虚拟机):-JVM是Java程序的运行平台,它是一种抽象化的计算机,可以将编译后的Java字节码(.class文件)转换为特定操作系统能够执行的机器码。它负责管理内存分配、垃圾回收、线程管理等底层服务,使得Java具有“一次编写,到处运行”的跨平台能力。JRE......
  • vue3 antd 报错:please transfer a valid name path to form item
    在使用antd时多层嵌套循环表单时校验会报如下错误:pleasetransferavalidnamepathtoformitem原因:是循环体和字段无法绑定解决如下:<a-form><divv-for="(item,index)inform.List":key="index"><a-form-item:name="['List',index,&......
  • Java中的 Exception 和 Error 有什么区别
    Exception和Error都是Throwable类的子类(在Java代码中只有继承了Throwable类的实例才可以被throw或者被catch)它们表示在程序运行时发生的异常或错误情况。总结来看:Exception表示可以被处理的程序异常,Error表示系统级的不可恢复错误。详细说明:1)Exception:是程序中可......
  • Java中包装类型和基本类型的区别:深入理解与应用
    Java中包装类型和基本类型的区别:深入理解与应用引言在Java编程中,基本类型(PrimitiveTypes)和包装类型(WrapperTypes)是两种不同的数据类型。基本类型是Java语言的核心部分,而包装类型则是为了提供更多的功能和灵活性。本文将深入探讨Java中包装类型和基本类型的区别,帮助你更......
  • 管理 Python 环境和依赖关系的工具 venv、virtualenv、pipenv 、poetry 、 miniforge
    管理Python环境和依赖关系的工具venv、virtualenv、pipenv、poetry、miniforge和anaconda的区别venv、virtualenv、pipenv、Poetry、Miniforge和Anaconda都是用于管理Python环境和依赖关系的工具,但它们在功能和使用场景上有一些显著的区别。以下是它们的主要区别:v......