@NonNull注解允许在验证中使用空值。

3

我在控制器中定义了以下方法:

@PostMapping("/register")
    public String registerNewUser(@Valid User user, BindingResult result, Model model, RedirectAttributes redirectAttributes) {
        System.out.println(result);
        System.out.println(user);
        if(result.hasErrors()) {
            System.out.println("***ERROR***");
            System.out.println(result.getAllErrors());
            return result.getAllErrors().toString();
        } else {
            //userRepository.save(user);
            System.out.println("user saved!");
            return "user saved!";
        }
    }

我的用户实体指定如下:

@NonNull
@Column(nullable = false, unique = true)
@Valid
public String alias;

现在,如果我进行一个简单的POST请求(我使用Chrome扩展程序Advanced REST client),我会得到以下结果:

org.springframework.validation.BeanPropertyBindingResult: 0 errors
User(id=null, email=null, password=null, enabled=false, firstName=null, lastName=null, fullName=null null, alias=null, roles=[], links=[])
user saved!

即使 @NonNull 别名为 null,似乎仍会进行验证。

如果我将 @NonNull 更改为 @NotEmpty

那么验证将按预期工作:

[Field error in object 'user' on field 'alias': rejected value [null]; codes [NotEmpty.user.alias,NotEmpty.alias,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.alias,alias]; arguments []; default message [alias]]; default message [must not be empty]]

但我不明白的是为什么@NonNull允许Null值?


1
你从哪个包中获取了 NotNull - Andronicus
Project Lombok 导入 - MrD
应该是来自javax.validation包,我猜测。 - Fabien MIFSUD
啊,好的,我明白了,那会有道理。所以,如果我想同时使用它们,我应该为其中一个使用完整的包名称? - MrD
3个回答

3

JSR-303验证API中没有@NonNull注释。该注解称为@NotNull。确保实际使用javax.validation.constraints.NotNull注释来标记字段。


2
你应该使用 javax.validation 包中的 NotNull,而不是 lombok 中的(当 Java 开始支持验证时,这些将被删除 - 请参见 此处)。它可以验证 beans。更多信息请访问 这里。你也可以使用 hibernate 的 org.hibernate.validator 中的 @NotNull 进行验证。

2

javax.validation.constraints


@NotNull: 被注释的元素必须不为null。接受任何类型。

@NotEmpty: 被注释的元素必须不为null且不为空。支持的类型有:

  • CharSequence(评估字符序列的长度)
  • Collection(评估集合的大小)
  • Map(评估映射的大小)
  • Array(评估数组的长度)

@NotBlank: 被注释的元素必须不为null且至少包含一个非空白字符。接受CharSequence。


@NonNull refer to Lombok

以下是你可能会喜欢的详细信息,点击这里查看原始答案。请注意,此链接将带您离开本网站。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接