Java 参数验证注入(无 REST API 调用)

Java injection on parameter validation (without REST API call)

我有一个 class A,我想验证“id”不超过 15 个字符,所以我使用 @Size(min = 1, max = 15, message = "Error"):

public final class A {

    @Size(min = 1, max = 15, message = "Error")
    private final String id;
    private final String anotherString;
  ....
}

我正在像下面这样使用 A@Valid:

  public final class C {
    
    void methodThatUsesA(@Valid final A a, final B b)  {
    ...
    }
  }

此外,如果我像下面这样调用 methodThatUsesA,字符串超过 15 个字符,则不会触发验证,我不知道为什么:

 methodThatUsesA(new A("AZERTYUIOPQSDFGDFG", 'a'), new B()){}

接受任何帮助:)

首先,您需要创建并提供一个 MethodValidationPostProcessor Spring-managed bean,如下所示:

@Configuration
public class MethodValidationConfig {

    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        return new MethodValidationPostProcessor();
    }
}

然后您需要将 @Validated 添加到您的 class 中,如下所示:

@Validated
public final class A {

    @Size(min = 1, max = 15, message = "Error")
    private final String id;
    private final String anotherString;
    
    ....
}

请记住,这仅在 AC 都是 Spring 托管 bean 时才有效。