Java 无法触发构造函数级验证

Java 无法触发构造函数级验证,java,validation,bean-validation,spring-annotations,spring-validator,Java,Validation,Bean Validation,Spring Annotations,Spring Validator,我无法仅使用注释运行构造函数参数验证 我的代码: @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;

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

我的代码:

@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)
由于@NotNull,我得到了ConstraintViolationException,但这不起作用

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

validator.forExecutables().validateConstructorParameters(
            ReflectionUtils.accessibleConstructor( TestConstructorLevel.class, int.class, int.class, Integer.class ),
            new Object[] { 2,1, null } );
但这并不合适

我尝试将TestConstructorLevel类创建为Springbean,但没有任何更改

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


另外,它是SpringBoot应用程序,

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

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


验证器可以使用此元数据执行其验证工作。但是构造函数只是一个构造函数。

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

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


验证器可以使用此元数据执行其验证工作。但是构造函数只是一个构造函数。

我不想更改类构造函数中的任何内容,我只想验证构造函数参数。与此处方法参数的验证相同:
code
@Service@Validated public class MyService{public boolean methodParameterValidation(@NotNull整数值){return false;}}
code
您希望调用构造函数会引发验证异常,只是因为您已将注释添加到其参数之一。我试图解释这是一个不切实际的期望,因为注释不是注释。它们不会像您期望的那样更改构造函数的行为。验证SpringBean方法的参数只起作用,因为Spring不仅仅调用该方法:它检测注释,通过代理拦截对该方法的调用,调用验证API来验证参数,最后,如果参数有效,则调用该方法。这是一个完全不同的问题。现在的问题是“Spring是否支持bean构造函数验证”?我不认为是这样。坦白地说,我会在构造函数中写一个if检查。你是对的。Spring没有这样的功能。可能是因为构造函数级别的验证看起来像是无用的东西。非常感谢。我不尝试更改类构造函数中的任何内容,我只想验证构造函数参数。与此处方法参数的验证相同:
code
@Service@Validated public class MyService{public boolean methodParameterValidation(@NotNull整数值){return false;}}
code
您希望调用构造函数会引发验证异常,只是因为您已将注释添加到其参数之一。我试图解释这是一个不切实际的期望,因为注释不是注释。它们不会像您期望的那样更改构造函数的行为。验证SpringBean方法的参数只起作用,因为Spring不仅仅调用该方法:它检测注释,通过代理拦截对该方法的调用,调用验证API来验证参数,最后,如果参数有效,则调用该方法。这是一个完全不同的问题。现在的问题是“Spring是否支持bean构造函数验证”?我不认为是这样。坦白地说,我会在构造函数中写一个if检查。你是对的。Spring没有这样的功能。可能是因为构造函数级别的验证看起来像是无用的东西。非常感谢。