java - Spring验证:未调用方法参数约束
问题描述
每个人。
因此,我有一个带有控制器的 SpringBoot 应用程序,该控制器具有多种方法,将以下 POJO 作为参数:
package com.example.dto;
import lombok.Data;
@Data
public class MyEntity {
@NotNull
private String fieldA;
private String fieldB;
}
对于控制器端点之一,我想应用额外的验证逻辑,所以在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
是我要应用的约束注释。
@NotNull
我的问题是,只有在定义的检查MyEntity
成功通过时才会调用这个额外的约束。如果fieldA
为 null,ValidEntity
则忽略约束,客户端会收到不完整的验证结果。我错过了什么?
解决方案
我对此并不完全确定,因为我从未使用过该validation.xml
文件。
但是,我会说 Spring 首先创建对象,然后应用验证。@NotNull
验证是在创建实例时执行的。这意味着如果验证失败,构造将抛出异常,Spring 甚至不会尝试检查您的约束(在我看来这是有道理的)。
我认为您可以通过使用约束创建注释并在课堂上使用它来“修复”它。如果我是对的,将检查两个注释并且抛出的异常将包含所有错误。
这只是一个猜测。让我知道它是否有效。
推荐阅读
- python - 使用 Python 脚本在 Abaqus 中自动生成力-位移曲线
- python - 熊猫显示唯一计数和唯一值?
- javascript - 如何在 Node.js 中编写一个使用 ANSI 编码更新数组的函数
- python - 匹配数据框中的列并考虑到列表
- php - 使用 Ilovepdf 和 dompdf 合并两个 pdf
- java - 在 crt 被撤销之前签署的文件的撤销检查
- javascript - 如何从另一个类访问方法并创建对象
- c# - 如何将此类拆分为子类C#
- javascript - React-pdf-print 生成一个空的 PDF 文件
- docker - 使用 Clair 进行 Docker 静态分析?