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

@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日

相关文章

  • php 实现账号不能同时登陆的方法分析【当其它地方登陆时,当前账号失效】

    实现账号不能同时登录的方法可以通过以下几个步骤来实现: 1. 给用户添加一个会话标识 在用户登录成功后,我们可以给当前用户添加一个会话标识,例如一个token,用来记录当前用户的会话状态。 2. 在用户登录时检查会话标识 在用户登录时,我们需要先检查当前用户是否已经有会话标识了,如果已经有了,则表示当前用户已经登录了。我们可以进行一些处理,例如提示用户当前账…

    other 2023年6月27日
    00
  • 关于Go你不得不知道的一些实用小技巧

    关于Go你不得不知道的一些实用小技巧 Go语言是一种现代化的编程语言,强调简单性、可靠性和效率。在实际的开发过程中,许多人可能会遇到一些问题,下面介绍一些Go语言的实用小技巧,帮助你更好的解决问题。 实用技巧1:使用defer语句 Go语言中的defer语句可以用于在函数返回之前执行一些代码,你可以使用它来释放资源、记录日志和跟踪函数的执行过程。 func …

    other 2023年6月26日
    00
  • 微软承诺:致力于解决 Win11 应用兼容性问题

    微软承诺:致力于解决 Win11 应用兼容性问题 微软在发布 Win11 后表示致力于解决应用兼容性问题,以确保用户的流畅使用体验。其实,Win11 对应用程序的兼容性情况与 Windows 10 差异并不大,大部分软件能够良好兼容,但也有部分软件存在兼容性问题,可能需要做出调整才能正常运行。那么该如何解决 Win11 应用兼容性问题呢? 利用内置的应用兼容…

    other 2023年6月25日
    00
  • [工具推荐]001.flippdf使用教程

    工具推荐:001.flippdf 001.flippdf是一款免费的在线PDF转换工具,可以将PDF文件转换为可翻页的HTML5格式,方便用户在网页上浏览和分享。本文将提供001.flippdf使用教程的完整攻略,包括以下步骤: 访问001.flippdf网站 上传PDF文件 转换PDF文件为HTML5格式 预览和分享HTML5格式文件 同时,本文将提供两个…

    other 2023年5月9日
    00
  • 魔兽世界邪DK属性优先级 6.0邪DK如何堆属性详解

    魔兽世界邪DK属性优先级 6.0邪DK如何堆属性详解 1. 简介 邪恶死亡骑士(邪DK)是魔兽世界中的一个职业,他们以邪恶和死亡的力量为武器,在战斗中以高伤害输出为特点。在6.0版本中,邪DK的属性优先级决定了他们的输出能力和存活能力。 2. 属性优先级 邪DK的属性优先级如下: 力量(Strength):力量是邪DK最重要的属性,它直接影响了邪DK的攻击力…

    other 2023年6月28日
    00
  • JavaScript常见继承模式实例小结

    下面是JavaScript常见继承模式实例小结的完整攻略。 常见继承模式实例小结 在JavaScript中实现继承有多种方法,下面将会介绍常见的几种方法,并通过示例说明。 1. 原型链继承 原型链继承是JavaScript中最常见的继承模式,它的实现方法如下: function Animal (name) { this.name = name } Anima…

    other 2023年6月27日
    00
  • GTA5 PC版任务完成闪退怎么办 任务完成闪退解决方法介绍

    GTA5 PC版任务完成闪退解决方法 问题描述 在GTA5 PC版游戏中,有时候在完成任务时会出现闪退的情况,这给玩家的游戏体验造成了一定影响,本文将详细介绍如何解决任务完成闪退的问题。 解决方法 方法一:更新显卡驱动 显卡驱动是电脑运行游戏的基础,如果显卡驱动版本过低或者出现了问题,就会导致游戏运行不正常。因此,第一种解决方式就是更新显卡驱动。 具体步骤如…

    other 2023年6月27日
    00
  • vue子路由跳转实现tab选项卡

    当使用Vue.js实现子路由跳转来实现tab选项卡时,可以按照以下攻略进行操作: 1. 设置路由 首先,您需要设置Vue的路由,以便支持子路由的跳转。以下是一个示例: // 定义路由 const routes = [ { path: ‘/’, component: Home, children: [ { path: ‘tab1’, component: Ta…

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