当前位置: 首页 > 知识库问答 >
问题:

无法触发构造函数级验证

方子安
2023-03-14

我无法仅使用注释运行构造函数参数验证。

我的代码:

@Data
@Validated
public class TestConstructorLevel
{
    private int a;
    private int b;

    private Integer nullValue;

    public TestConstructorLevel( int a, int b, @NotNull Integer nullValue )
    {
        this.a = a;
        this.b = b;
        this.nullValue = nullValue;
    }

}

我希望当我做一些服务时

new TestConstructorLevel(1, 2, null)

我得到了ConstraintViolationException,因为@NotNull,但这不起作用。

当我手动触发验证时,我唯一能让它工作的变体如下:

validator.forExecutables().validateConstructorParameters(
            ReflectionUtils.accessibleConstructor( TestConstructorLevel.class, int.class, int.class, Integer.class ),
            new Object[] { 2,1, null } );

但这并不合适。

我试图创建TestConstructorLevel类作为Spring bean,但没有任何改变。

所以我的问题是:我需要使用什么注释来触发构造函数的验证。

另外,这是SpringBoot应用程序,

共有1个答案

丁理
2023-03-14

您不可能仅仅通过向构造函数或其参数添加注释来更改构造函数的功能。

注释就是:注释。它只是提供了一些关于构造函数参数的元数据。

验证器可以使用此元数据执行其验证工作。但是构造器就是这样:构造器。

 类似资料:
  • 问题内容: 通常,类构造函数应接受的最大参数数量是多少?我正在开发一个需要大量初始化数据(当前有10个参数)的类。但是,带有10个参数的构造函数感觉不正确。这使我相信我应该为每个数据创建一个getter / setter。不幸的是,getter / setter模式不会强迫用户输入数据,没有它,对象的表征就不完整,因此毫无用处。有什么想法吗? 问题答案: 有那么多参数,该考虑构建器模式了。创建一个

  • 问题内容: 如何使用Hibernate验证程序来验证构造函数或方法中的参数?我希望在ValueObject创建之前进行验证,因此除非所有参数都有效,否则我可以引发异常而不创建对象。 基本上,我正在尝试使用注释,而不是尽可能执行以下操作: 我试过遵循这样的文档,虽然看起来似乎有效,但仍然会导致创建对象。 将注释添加到构造函数参数似乎无效 我如何创建对象: 验证器: 问题答案: 对于找到此帖子的其他任

  • 问题内容: 大家好,我正在尝试在选项卡中列出文本数据,这是我的方法 无法解析构造函数ArrayAdapter 的方法,这是我的主要活动。任何帮助将不胜感激,我仍然是一个noobie 。 问题答案: 更改 至 你可以在使用。

  • 正如michaelpark所指出的,如果我们不想最终使用错误的构造函数,那么添加完美的转发构造函数可能会很棘手。 目前,我有一个类,它使用了一个完美的转发构造函数,因此,我需要显式声明4个构造函数:

  • 问题内容: 有人可以帮我这段代码。当前它将在第4行进行投诉:webDriver =新的FirefoxDriver(ff_ep_profiles)说它无法解析构造函数。我需要加载扩展程序,因此我正在创建配置文件 问题答案: 在使用 Selenium v​​3.11.x , GeckoDriver v0.20.0 和 Firefox Quantum v59.0.2时 ,可以使用不同的选项来调用新的/现