在Spring方法验证中,默认情况下如何验证方法参数为NotNull?

时间:2018-11-20 13:35:00

标签: java spring jsr380

Here是关于方法验证的示例。因此,将检查方法参数设置为非null我必须编写以下代码:

import org.springframework.validation.annotation.Validated

@Validated
public class SomeClass {
    public void myMethod(@NotNull Object p1, @Nullable Object p2) {}
}

是否有一种方法可以设置Spring bean验证,以使所有参数默认验证为@NotNull?例如。当p1null时,以下操作将失败:

import org.springframework.validation.annotation.Validated

@Validated
public class SomeClass {
    public void myMethod(Object p1, @Nullable Object p2) {}
}

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以选择编写自己的MILLISECOND注释

@NotNullArgs

和方面:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NotNullArgs {
}

然后您可以像这样使用它:

@Aspect
@Component
public class ArgumentMatcher {

  @Around(value = "@annotation(NotNullArgs)")
  public Object verifyAuthorities(ProceedingJoinPoint joinPoint) throws Throwable {
     final Optional<Object> nullArg = Arrays.stream(joinPoint.getArgs())
       .filter(Objects::isNull)
       .findFirst();

     if (nullArg.isPresent() && joinPoint.getArgs().length > 0) {
       throw new IllegalArgumentException(); // or NPE
     } else {
       return joinPoint.proceed();
     }
  }
}

这只是草稿,但是您可以使用此代码作为起点

答案 1 :(得分:0)

如果您希望Spring自动验证方法参数,请执行以下操作:

  1. org.hibernate.validator:hibernate-validator添加到您的依赖项中
  2. @javax.validation.constraints.NotNull标记所需的方法参数

然后,当您调用此类方法并且不提供必需的参数时,您将获得javax.validation.ConstraintViolationException异常。

另一种方法(使用起来更容易)是使用Lombok的方法:只需用@lombok.NonNull标记方法参数,其余的将由Lombok完成。