java - @NonNull 注释允许在验证中使用空值

标签 java spring hibernate spring-boot lombok

我的 Controller 中有以下方法:

@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;

现在,如果我发出一个简单的发布请求(我使用 Chrome 扩展的高级 REST 客户端),我会得到:

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 别名为空,但它似乎仍然有效。

如果我将@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?

最佳答案

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

关于java - @NonNull 注释允许在验证中使用空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55047048/

相关文章:

java - 模块描述 rune 件允许导入语句为什么?

java - 如果我使用 JAX-RS 来实现 Web 应用程序(相对于 Web 服务),您怎么看?

java - 如何在 Java 中使用 AspectJ 记录父级和子级的线程 ID

java - 无法模拟 FileInputStream

java - 尝试显示 jsp 时出现 404 错误

java - 尽管设置了心跳,RabbitMQ 连接仍掉线且无法恢复

spring -/src/groovy中的动态 Autowiring

java - hibernate @onetomany FK 未设置

java - Cascade.DELETE_ORPHAN 和父/子关系的 Hibernate "deleted entity passed to persist"问题

java - 从 hibernate 配置创建 EntityManagerFactory