关于@NotNull注解失效的原因之一

 更新时间:2024年01月04日 16:03:39   作者:我是时生  
这篇文章主要介绍了关于@NotNull注解失效的原因之一,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

@NotNull注解失效原因之一

给String类型加上@NotNull注解时,只有传入的参数为空时才会报异常,当传入的为空字符串时并不会报异常,就会出现报异常的现象

传参为空指的是该参数就没有传,为空字符串指的是有该参数但是是双引号""

Lombok判断注解怎么使用,

梳理下来为

  • @NotEmpty 用在集合类上
  • @NotBlank 用在String上
  • @NotNull 用在基本类型上

最后最重要的是,在接口参数前加注解’@Validated’

@Valid注解是什么

@Valid

用于验证注解是否符合要求,直接加在变量user之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息。

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping
    public User create (@Valid @RequestBody User user) {
        System.out.println(user.getId());
        System.out.println(user.getUsername());
        System.out.println(user.getPassword());
        user.setId("1");
        return user;
    }
}    

然后在 User 类中添加验证信息的要求:

public class User {
    private String id;  
 
    @NotBlank(message = "密码不能为空")
    private String password;
}

@NotBlank 注解所指的 password 字段,表示验证密码不能为空,如果为空的话,上面 Controller 中的 create 方法会将message 中的"密码不能为空"返回。

当然也可以添加其他验证信息的要求:

限制说明
@Null限制只能为null
@NotNull限制必须不为null
@AssertFalse限制必须为false
@AssertTrue限制必须为true
@DecimalMax(value)限制必须为一个不大于指定值的数字
@DecimalMin(value)限制必须为一个不小于指定值的数字
@Digits(integer,fraction)限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future限制必须是一个将来的日期
@Max(value)限制必须为一个不大于指定值的数字
@Min(value)限制必须为一个不小于指定值的数字
@Past限制必须是一个过去的日期
@Pattern(value)限制必须符合指定的正则表达式
@Size(max,min)限制字符长度必须在min到max之间
@Past验证注解的元素值(日期类型)比当前时间早
@NotEmpty验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

除此之外还可以自定义验证信息的要求,例如下面的 @MyConstraint:

public class User {
 
    private String id;
 
    @MyConstraint(message = "这是一个测试")
    private String username;
 
}

注解的具体内容:

@Constraint(validatedBy = {MyConstraintValidator.class})
@Target({ELementtype.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyConstraint {
    String message();
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {}; 
}

下面是校验器:

public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> {
    @Autowired
    private UserService userService;
    
    @Override
    public void initialie(@MyConstraint constarintAnnotation) {
        System.out.println("my validator init");
    }
    
    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        userService.getUserByUsername("seina");
        System.out.println("valid");
        return false;
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL存储全角字符和半角字符的区别

    MySQL存储全角字符和半角字符的区别

    这篇文章主要介绍了MySQL存储全角字符和半角字符的区别的相关资料,需要的朋友可以参考下
    2017-05-05
  • Mysql命令大全(详细篇)

    Mysql命令大全(详细篇)

    这篇文章主要介绍了Mysql命令大全,这里整理的算是比较详细的,需要的朋友可以参考下
    2015-11-11
  • mysql备份与恢复详解

    mysql备份与恢复详解

    本篇文章是对mysql的备份与恢复进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL的下载、安装详细教程

    MySQL的下载、安装详细教程

    本文的主要目的是在 Windwos 上安装 MySQL,以下内容是源于 B站 - MySQL数据库入门到精通整理而来,需要的朋友可以参考下
    2023-06-06
  • mysql 8.0.28安装配置方法图文教程(压缩包方式)

    mysql 8.0.28安装配置方法图文教程(压缩包方式)

    这篇文章主要为大家详细介绍了mysql 8.0.28安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • mysql数据库基础知识点与操作小结

    mysql数据库基础知识点与操作小结

    这篇文章主要介绍了mysql数据库基础知识点与操作,总结分析了mysql数据库修改数据表、增删改查及数据库函数基本功能,需要的朋友可以参考下
    2020-01-01
  • MySQL的Grant命令详解

    MySQL的Grant命令详解

    mysql中可以通过Grant命令为数据库赋予用户权限,这里简单介绍下Grant的使用方法,需要的朋友可以参考下
    2013-10-10
  • 同时运行多个MySQL服务器的方法

    同时运行多个MySQL服务器的方法

    在同一台机器上运行多个有些情况下你可能想要在同一台机器上运行多个服务器。例如,你可能想要测试一个新的MySQL版本而让你现有生产系统的设置不受到干扰, 或你可能是想要为不同的客户提供独立的MySQL安装一个因特网服务供应商。
    2008-05-05
  • MySQL高级进阶sql语句总结大全

    MySQL高级进阶sql语句总结大全

    这篇文章主要给大家介绍了关于MySQL高级进阶sql语句的相关资料,文中通过图文以及实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • mysql 找回误删表的数据方法(必看)

    mysql 找回误删表的数据方法(必看)

    下面小编就为大家带来一篇mysql 找回误删表的数据方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论