@Valid注解的作用及@Valid注解与@Validated的区别

yizhihongxing

@Valid注解的作用及@Valid注解与@Validated的区别

@Valid注解的作用

@Valid注解是Java Bean Validation(JSR 380)规范中的一部分,用于在方法参数、方法返回值、字段和方法级别上进行数据校验。它的作用是告诉验证框架对被注解的目标进行校验。

当使用@Valid注解时,验证框架会自动根据目标对象的注解配置进行校验,并根据校验结果抛出相应的异常。这样可以确保数据的合法性和一致性,提高系统的可靠性和安全性。

@Valid注解与@Validated的区别

虽然@Valid@Validated都是用于数据校验的注解,但它们有一些区别。

  1. 适用范围不同@Valid注解适用于Java Bean Validation规范,可以用于方法参数、方法返回值、字段和方法级别的校验。而@Validated注解是Spring框架提供的,主要用于方法参数和方法级别的校验。

  2. 校验方式不同@Valid注解是基于注解配置的校验方式,可以使用JSR 380规范中定义的各种校验注解,如@NotNull@Size等。而@Validated注解是基于分组校验的方式,可以使用Spring框架提供的校验注解,如@NotBlank@Email等。

  3. 校验顺序不同@Valid注解会按照注解的声明顺序依次校验,即使前面的校验失败,后面的校验也会继续执行。而@Validated注解会根据分组的顺序进行校验,如果前面的分组校验失败,后面的分组校验会被跳过。

示例说明

示例一:使用@Valid注解进行参数校验

public class User {
    @NotNull(message = \"用户名不能为空\")
    private String username;

    @Size(min = 6, max = 20, message = \"密码长度必须在6到20之间\")
    private String password;

    // 省略getter和setter方法
}

@RestController
public class UserController {
    @PostMapping(\"/users\")
    public void createUser(@Valid @RequestBody User user) {
        // 处理用户创建逻辑
    }
}

在上面的示例中,User类使用了@NotNull@Size注解对usernamepassword进行校验。在createUser方法中,使用@Valid注解对User对象进行参数校验。如果校验失败,将抛出MethodArgumentNotValidException异常。

示例二:使用@Validated注解进行方法级别校验

@Service
@Validated
public class UserService {
    public void updateUser(@NotBlank(message = \"用户名不能为空\") String username) {
        // 更新用户逻辑
    }
}

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @PutMapping(\"/users/{id}\")
    public void updateUser(@PathVariable Long id, @RequestParam @NotBlank(message = \"新用户名不能为空\") String username) {
        userService.updateUser(username);
    }
}

在上面的示例中,UserService类使用了@NotBlank注解对username进行校验。在UserController中,updateUser方法使用了@Validated注解,表示对该方法进行校验。如果校验失败,将抛出ConstraintViolationException异常。

通过以上两个示例,我们可以看到@Valid@Validated注解的使用方式和效果。@Valid注解适用于Java Bean Validation规范,而@Validated注解适用于Spring框架。根据具体的需求和场景,选择合适的注解进行数据校验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:@Valid注解的作用及@Valid注解与@Validated的区别 - Python技术站

(0)
上一篇 2023年7月28日
下一篇 2023年7月28日

相关文章

  • createtableselectfrom和insertintotableselectf

    以下是关于“CREATE TABLE SELECT FROM和INSERT INTO TABLE SELECT FROM”的完整攻略,包括基本概念、解决方法、示例说明和注意事项。 基本概念 在关系型数据库中,CREATE TABLE语句用于创建新的表,SELECT语句用于从表中检索数据,INSERT INTO语句用于向表中插入数据。CREATE TABLE …

    other 2023年5月7日
    00
  • 浅谈C++变量作用域

    浅谈C++变量作用域 在C++中,变量的作用域指的是变量在程序中可见和可访问的范围。变量的作用域可以影响变量的生命周期和可见性。本文将详细讲解C++变量作用域的概念和使用方法,并提供两个示例说明。 局部作用域 局部作用域是指变量在特定代码块内部可见和可访问。一般情况下,局部变量在其所在的代码块内部有效,超出该代码块范围后将无法访问。以下是一个示例: #inc…

    other 2023年7月29日
    00
  • 浅谈Spring 的Controller 是单例or多例

    浅谈Spring的Controller是单例还是多例 在Spring框架中,Controller是用于处理用户请求的组件。关于Controller的作用域,有一些常见的误解。下面将详细讨论Spring的Controller是单例还是多例的问题,并提供两个示例来说明。 单例模式 默认情况下,Spring的Controller是以单例模式进行管理的。这意味着在整…

    other 2023年8月20日
    00
  • 浅谈js中的变量名和函数名重名

    在JavaScript中,变量名和函数名可以重名,但这可能会导致一些问题。下面是一个详细的攻略,帮助您了解JavaScript中变量名和函数名重名的问题。 … 变量名和函数名重名的问题 当变量名和函数名重名时,可能会导致以下问题: 变量被函数覆盖:如果变量名和函数名重名,那么函数的定义将覆盖变量的值,导致无法访问原始变量的值。 函数调用错误:如果变量名和…

    other 2023年8月8日
    00
  • can帧格式(标准帧、拓展帧)

    CAN帧格式(标准帧、拓展帧)攻略 CAN(Controller Area Network)是一种串行通信协议,用于在微控制器和设备之间传输数据。帧是CAN协议中的基本数据单元,包括标准帧和拓展帧两种格式。本攻略将详细介绍CAN帧的格式和使用方法。 CAN帧格式 CAN帧由以下几个部分组成: 报文ID:用于标识CAN帧的唯一性。 数据长度码(DLC):用于指…

    other 2023年5月6日
    00
  • SpringBoot项目启动时如何读取配置以及初始化资源

    要让SpringBoot项目在启动时读取配置以及初始化资源,可以采用以下两种方法: 通过@Configuration注解的类来配置 在SpringBoot项目中,可以使用@Configuration注解来指定一个类为配置类,这个类中可以定义Bean和配置信息。在配置类中,可以使用@Bean注解定义Bean,也可以使用@Value注解来读取配置信息。在这个类中…

    other 2023年6月20日
    00
  • Win10怎么升级到17127.1版? Win10预览版17127.1很卡的解决办法

    Win10如何升级到17127.1预览版 如果你已经是Win10预览版用户,可以通过以下步骤升级到17127.1版本: 在桌面搜索栏中输入Windows Update,打开Windows Update设置; 点击“检查更新”按钮,等待系统自动检测更新; 如果系统检测到更新版本,就会显示“Windows 10 Insider Preview XXXXX”; 点…

    other 2023年6月27日
    00
  • 使用Docker的NFS-Ganesha镜像搭建nfs服务器的详细过程

    使用Docker的NFS-Ganesha镜像搭建NFS服务器的详细过程如下: 准备工作 安装Docker并启动; 安装NFS客户端并测试网络连通性; 准备一个共享目录。 拉取镜像 执行以下命令拉取最新版的NFS-Ganesha镜像: docker pull crispy1989/docker-nfs-ganesha 创建容器 执行以下命令创建容器: dock…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部