首页 > 解决方案 > 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则忽略约束,客户端会收到不完整的验证结果。我错过了什么?

标签: javaspring-bootjavax.validation

解决方案


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

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

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

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


推荐阅读