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日

相关文章

  • MySQL 日期时间加减的示例代码

    当我们需要在MySQL数据库中进行日期时间加减操作时,可以使用MySQL提供的日期时间函数来实现。以下是最常用的日期时间函数: DATE_ADD(date, INTERVAL expr unit):加法操作,将日期加上一个时间间隔 DATE_SUB(date, INTERVAL expr unit):减法操作,将日期减去一个时间间隔 NOW():返回当前日期…

    database 2023年5月22日
    00
  • 查看MySQL的系统帮助文档的3种方式

    在 MySQL 中,你可以使用以下几种方式查看系统帮助: 使用 HELP 命令 在 MySQL 的命令行界面中,你可以使用 HELP 命令来获取系统帮助。例如,输入以下命令: mysql> HELP; 这将显示 MySQL 帮助菜单的一部分,其中包括常用命令的简要说明。 如果你想查看某个命令的详细帮助信息,可以在 HELP 后面加上该命令的名称。例如,…

    MySQL 2023年3月9日
    00
  • Docker部署SQL Server 2019 Always On集群的实现

    下面我来简单介绍一下Docker部署SQL Server 2019 Always On集群的实现攻略。 一、概述 SQL Server 2019 Always On集群是一种高可用的解决方案,可以保证数据库服务的连续性和可靠性。而采用Docker部署SQL Server 2019 Always On集群,则可以更容易地进行部署和管理。 二、实现步骤 准备Do…

    database 2023年5月22日
    00
  • 通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法

    这是一篇关于“通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法”的攻略,攻略包含以下内容: 问题原因 解决方法 配置允许远程连接的账户和密码 配置服务器的防火墙规则 示例说明 问题原因 当我们在使用Navicat for MySQL远程连接MySQL数据库时,会遇到以下错误: error 1130 (HY000): Ho…

    database 2023年5月18日
    00
  • Oracle中sys和system用户、系统权限和角色的区别

    Oracle是一个功能非常强大的关系型数据库管理系统,它提供了多个预定义用户,如sys和system。本文将详细介绍sys和system 用户、系统权限和角色的区别。 1. sys用户和system用户的区别 1.1 sys用户 sys用户是Oracle系统级别的用户,是数据库管理员用户,在安装Oracle数据库后,会自动创建sys用户。sys用户是最高权限…

    database 2023年5月22日
    00
  • php使用PDO事务配合表格读取大量数据插入操作实现方法

    下面我来详细讲解“PHP使用PDO事务配合表格读取大量数据插入操作实现方法”的完整攻略。 什么是PDO PDO(PHP Data Objects)是一个轻量级、通用性较强的PHP数据访问层,它提供了一个数据访问抽象层,用于从数据源(如 MySQL、Oracle、SQL Server等)中获取和操作数据。相比于传统的mysql、mysqli扩展,PDO更加灵活…

    database 2023年5月21日
    00
  • Couchbase 和 MS SQL Server 的区别

    Couchbase是一个NoSQL数据库,而MS SQL Server则是一个关系型数据库。他们之间的区别在以下几个方面: 数据模型 Couchbase的数据模型是一个非关系模型。它将数据存储在一个(或多个)JSON文档中。这些文档以集群节点之间的方式进行复制和分区。这意味着数据无需先进行规范化,文档可以包含不同数量的字段,这样Couchbase允许开发人员…

    database 2023年3月27日
    00
  • MongoDB分片在部署与维护管理中常见的事项总结大全

    MongoDB分片是一种可水平扩展的技术,可以使得数据库可以存储更多的数据,并且通过多台服务器的协作可以提高数据的查询和写入性能。然而,在进行分片部署以及维护管理过程中,我们需要注意以下几点事项: 1. 分片的注意事项 在进行分片时,我们需要注意以下几点: 确保每个分片集群均被恰当配置,包括可以执行水平缩放的服务器和适当配置的操作系统。对于每一个分片集群,至…

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