验证输入数据的注解:@NotNull和@NotEmpty的区别

news/2024/7/7 20:38:14 标签: java

@NotNull@NotEmpty 是用于验证输入数据的注解,它们有不同的作用和适用场景:

  1. @NotNull 注解

    • 作用:确保字段的值不是 null
    • 适用类型:任何对象类型(例如 StringCollectionMapArray 等)。
    • 示例:如果字段的值是 null,验证将失败;但如果字段的值是空字符串、空集合等,则验证通过。
    java">public class UserDTO {
        @NotNull(message = "Username cannot be null")
        private String username;
    
        // getters and setters
    }
    
  2. @NotEmpty 注解

    • 作用:确保字段的值不是 null,而且不能为空(对于字符串,不能为空字符串;对于集合,不能为空集合)。
    • 适用类型:字符串、集合、地图等(适用于 CharSequenceCollectionMap 和数组)。
    • 示例:如果字段的值是 null 或空字符串、空集合等,验证将失败。
    java">public class UserDTO {
        @NotEmpty(message = "Username cannot be empty")
        private String username;
    
        // getters and setters
    }
    

示例代码

假设有一个用户注册的 DTO 类,我们希望确保用户名不能为空,密码不能为空且长度至少为 8:

java">import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;

public class UserDTO {
    @NotEmpty(message = "Username cannot be empty")
    private String username;

    @NotNull(message = "Password cannot be null")
    @Size(min = 8, message = "Password must be at least 8 characters long")
    private String password;

    // getters and setters
}

controller 中:

java">import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping("/register")
    public ResponseEntity<String> registerUser(@Valid @RequestBody UserDTO userDTO) {
        // 处理注册逻辑
        return ResponseEntity.ok("User registered successfully");
    }
}

总结

  • 使用 @NotNull 确保字段不为 null
  • 使用 @NotEmpty 确保字段不为 null 且不为空。
  • 具体使用哪个注解取决于你的业务需求,例如:对于用户名,通常希望它既不为 null 也不为空,因此使用 @NotEmpty 更合适;而对于密码,我们不仅希望它不为 null,还希望它符合一定的长度,因此可以组合使用 @NotNull@Size

http://www.niftyadmin.cn/n/5535253.html

相关文章

【ai】ubuntu18.04 找不到 nvcc --version问题

nvcc --version显示command not found问题 这个是cuda 库: windows安装了12.5 : 参考大神:解决nvcc --version显示command not found问题 原文链接:https://blog.csdn.net/Flying_sfeng/article/details/103343813 /usr/local/cuda/lib64 与 /usr/local/cuda-11.3/lib64 完…

一、安全完善度等级SIL(Safety Integrity Level)介绍

目录 一、背景 二、定义 2.1 相关概念介绍如下&#xff1a; 2.2 扩展 2.3 注意事项 三、区分航空GNSS完好性监测中的误警率&#xff08;False Alarm Rate&#xff09;与列车安全完整性中的容忍故障发生率THR&#xff08;Tolerable Hazard Rate&#xff09; 3.1 航空GNSS…

前端工程化09-webpack静态的模块化打包工具(未完结)

9.1、开发模式的进化历史 webpacks是一个非常非常的强大的一个工具&#xff0c;相应的这个东西的学习也是有一定的难度的&#xff0c;里边的东西非常的多&#xff0c;里面涉及到的 概念的话也是非常非常的多的。 这个东西既然非常重要&#xff0c;那么在我们前端到底处于怎样…

自定义控件动画篇(八)animateLayoutChanges与LayoutTransition的使用

在Android开发中&#xff0c;animateLayoutChanges 和 LayoutTransition 都是用来在布局改变时添加动画效果的特性&#xff0c;但是它们的使用场景和方式有所不同。 animateLayoutChanges animateLayoutChanges 是一个布尔属性&#xff0c;当它被设置为true时&#xff0c;会使…

大数据可视化实验(六)——ECharts与pyecharts数据可视化

目录 一、实验目的... 1 二、实验环境... 1 三、实验内容... 1 1、ECharts可视化制作.. 1 1&#xff09;使用ECharts绘制折线图显示一周的天气变换。... 1 2&#xff09;使用ECharts绘制柱状图显示商品销量的变化。... 4 2、pyecharts可视化制作.. 7 1&#xff09;使用…

配置下载 docker镜像 playedu开源 最佳实践部署

下载docker-compose docker-ce https://github.com/docker/compose/tagswget https://github.com/docker/compose/releases/download/v2.28.0/docker-compose-linux-x86_64sudo chmod x /usr/local/bin/docker-compose下载docker镜像 国内加速地址 目前仍可用的镜像(随时可能失…

Android super.img结构及解包和重新组包

Android super.img结构及解包和重新组包 从Android10版本开始&#xff0c;Android系统使用动态分区&#xff0c;system、vendor、 odm等都包含在super.img里面&#xff0c;编译后的最终镜像不再有这些单独的 image&#xff0c;取而代之的是一个总的 super.img. 1. 基础知识 …

Rust 跨平台-Android 和鸿蒙 OS

1. 安装 rustup rustup 是 Rust 的安装和版本管理工具 $ curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh 该命令会安装 rusup 和最新的稳定版本的 Rust&#xff1b;包括&#xff1a; rustc Rust 编译器&#xff0c;用于将 Rust 代码编译成可执行文件或库。 ca…