Java中Validated、Valid 、Validator区别详解

Java中Validated、Valid 、Validator区别详解

背景介绍

在Java中,我们经常会使用各种注解来实现校验的功能。其中,@Valid、@Validated和Validator三种方式是比较常用的。本文将详细讲解它们的区别。

@Validated与@Valid注释

@Validated@Valid注释是两种校验注释。它们的职责是调用验证框架处理带注释的参数、方法返回值和字段。它们的作用是在控制器类的方法或方法参数上进行校验,主要校验常规数据类型,如String、Integer、Boolean。两者区别在于,@Validated更加强制性,会检测方法、属性、方法参数等,而@Valid注释只支持方法参数。

示例代码如下:

@GetMapping("/user")
public User getUserInfo(@Validated @RequestParam("id") Integer id) {...}

@PostMapping("/user")
public void addUser(@RequestBody @Valid User user){...}

在上面的示例中,@Validated@Valid注释均用于参数上,实现对参数的校验。这里的@RequestParam@RequestBody注释表示将请求参数自动绑定到方法参数。

Validator校验器

Validator是Java Bean Validation标准API的主要接口。它定义了一组用于验证Java Bean的方法,包括一些可自定义的约束注释。

示例代码如下:

public class UserValidator implements Validator {

    @Override
    public boolean supports(Class<?> clazz) {
        return User.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        User user = (User) target;
        if (user.getName() == null || user.getName().isEmpty()) {
            errors.rejectValue("name", "name.empty", "用户名不能为空");
        }

        if (user.getAge() != null && user.getAge() < 0) {
            errors.rejectValue("age", "age.invalid", "年龄必须大于等于0");
        }
    }
}

在上面的示例中,supports()方法用于判断是否支持校验对象,validate()方法则重写验证方法,实现了对用户对象的校验逻辑。

在实际使用中,我们可以使用Validator自定义注解,例如:

public class User {

    @NotNull(message = "用户名不能为空")
    private String name;

    @PositiveOrZero(message = "年龄必须大于等于0")
    private Integer age;

    //getter、setter方法省略

}

Java Bean Validation标准API提供了多种约束注释,如@NotNull@NotBlank@Positive等,可以方便地实现各种数据校验。

结论

总之,@Validated@Valid注释是用于控制器类和其方法参数上的校验注释,主要校验常规数据类型。而Validator是Java Bean Validation标准API的主要接口,其主要作用是提供了多种约束注释,可以方便地实现各种数据校验。

参考资料

  1. 官方文档:Bean Validation.
  2. 博客文章:Spring Boot数据校验(Valid 和 Validated)的区别.

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中Validated、Valid 、Validator区别详解 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Redis实现唯一计数的3种方法分享

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/121.html?1455855118 唯一计数是网站系统中十分常见的一个功能特性,例如网站需要统计每天访问的人数 unique visitor ​(也就是 UV)。计数问题很常见,但解决起来可能十分复杂:一是需要计数的量可能很大,比如…

    Redis 2023年4月13日
    00
  • 通过SQL语句来备份,还原数据库

    备份和还原数据库是数据库管理中的重要任务之一。在SQL语言中,我们可以使用一些命令来完成这些任务。下面是备份和还原数据库的完整攻略: 备份数据库 备份数据库可以帮助我们恢复数据,防止数据丢失。备份数据库有两种方式,一种是直接备份整个数据库,另一种是备份某个表。下面是备份数据库的步骤: 备份整个数据库 打开SQL Server管理工具,连接到你的数据库服务器;…

    database 2023年5月21日
    00
  • MySQL 使用事件(Events)完成计划任务

    MySQL 使用事件(Events)来完成计划任务是一个非常实用的技术,可以帮助我们实现定时执行某些操作的需求。下面是该技术的完整攻略: 步骤一:启用事件 在 MySQL 中,默认情况下是没有启用事件功能的,因此我们需要手动启用它。首先,需要修改 MySQL 配置文件 my.cnf,将 event_scheduler 参数的值设置为 ON,然后重启 MySQ…

    database 2023年5月22日
    00
  • 深入分析PHP优化及注意事项

    深入分析PHP优化及注意事项 PHP是一种流行的服务器端编程语言,然而,在应用程序较大而复杂的情况下,它的性能可能会受到影响。在本篇文章中,我将介绍一些PHP优化技术和注意事项,帮助你更好地提升PHP应用程序的性能。 1. 使用OPcache OPcache是一个免费的开源PHP缓存扩展,可以在服务器端缓存并预编译PHP脚本。OPcache能够避免每次请求时…

    database 2023年5月21日
    00
  • MySQL的mysqldump工具用法详解

    MySQL的mysqldump工具用法详解 什么是mysqldump mysqldump 是一个用于将 MySQL 数据库备份为SQL语句的工具,可以将数据库的结构和数据导出到文本文件。你可以将这个文本文件用于备份、复制、迁移数据。 mysqldump的语法 mysqldump [options] [database [tables]] mysqldump …

    database 2023年5月22日
    00
  • linux实现定时备份mysql数据库的简单方法

    下面我将介绍“Linux实现定时备份MySQL数据库的简单方法”的完整攻略,包含以下步骤: 1. 安装mysql和mysqldump命令 在Linux服务器上,需要先安装mysql和mysqldump命令才能进行备份。可以使用以下命令进行安装: sudo apt-get update sudo apt-get install mysql-server mys…

    database 2023年5月22日
    00
  • 如何使用Python在MySQL中使用排序查询?

    在MySQL中,可以使用ORDER BY子句对查询结果进行排序。在Python中,可以使用MySQL连接来执行排序查询。以下是在Python中使用排序查询的完整攻略,包括排序查询的基本语法、使用排序查询的例以及如何在中使用排序查询。 排序查询的基本语法 排序查询的基本语法如下: SELECT column_name(s) FROM table_name OR…

    python 2023年5月12日
    00
  • SpringBoot MongoDB 索引冲突分析及解决方法

    SpringBoot MongoDB 索引冲突分析及解决方法 背景 在使用 SpringBoot 集成 MongoDB 的过程中,我们常常会遇到索引报错的问题。这是因为在一个 MongoDB 集合中创建了多个索引,这会导致索引之间冲突,进而产生异常。 分析 为了解决索引冲突的问题,我们需要从以下几个方面进行分析: 1. 查看 MongoDB 集合中的索引 可…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部