大家。
因此,我有一个带有 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/