java - Spring 验证: method parameter constraint not called

标签 java spring-boot javax.validation

大家。

因此,我有一个带有 Controller 的 SpringBoot 应用程序,该 Controller 具有多种方法,并采用以下 POJO 作为参数:

package com.example.dto;

import lombok.Data;

@Data
public class MyEntity {
   @NotNull
   private String fieldA;

   private String fieldB;
}

对于 Controller 端点之一,我想应用额外的验证逻辑,因此在 validation.xml 中添加以下内容:

<constraint-mappings>
    <bean class="com.example.controller.SampleController" ignore-annotations="false">
        <method name="doFoo">
            <parameter type="com.example.dto.MyEntity">
                <valid />
                <constraint annotation="com.example.validation.ValidEntity" />
            </parameter>
        </method>
    </bean>
</constraint-mappings>

com.example.validation.ValidEntity 是我想要应用的约束注释。

我的问题是,只有在 MyEntity 中定义的 @NotNull 检查成功通过时,才会调用此附加约束。如果 fieldA 为 null,则忽略 ValidEntity 约束,并且客户端收到不完整的验证结果。我错过了什么?

最佳答案

我对此并不完全确定,因为我从未使用过 validation.xml 文件。

但是,我想说 Spring 首先创建对象,然后应用验证。 @NotNull 验证是在创建实例时执行的。这意味着如果验证失败,构造将抛出异常,Spring 甚至不会尝试检查您的约束(在我看来这是有道理的)。

我认为您可以通过使用约束创建注释并在类中使用它来“修复”它。如果我是对的,两个注释都会被检查,并且抛出的异常将包含所有错误。

这只是一个猜测。让我知道它是否有效。

关于java - Spring 验证: method parameter constraint not called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60433861/

相关文章:

java - Maven 多模块库构建

java - 通过 WebSocket 连接的 Spring SseEmitter

spring-boot - 无法使用 Apache Bench 测试 Spring Boot Webflux 性能

java - 验证约束,DTO 中的可选字段?

java - @Valid(javax.validation.Valid) 对于列表的类型是不递归的

json - Spring Boot - 如何使用 javax.validation 验证传入的嵌套 JSON 请求对象字段

java - 合并排序比较?

java - Android Bump Api Network 主线程异常

java - 字符串比较无法正常工作?

java - 访问Heroku端点-Spring Boot App 503服务不可用