Насколько валидными являются параметры метода NotNull по умолчанию при валидации метода Spring? - PullRequest
0 голосов
/ 20 ноября 2018

Здесь - пример проверки метода.Так что проверьте параметр paramerter как не ноль, я должен написать следующее:

import org.springframework.validation.annotation.Validated

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

Есть ли способ настроить проверку bean-компонента Spring, чтобы все параметры по умолчанию были проверены как @NotNull?Например, следующее не будет выполнено, если p1 равно null:

import org.springframework.validation.annotation.Validated

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

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Если вы хотите, чтобы Spring автоматически проверял аргументы метода, сделайте следующее:

  1. добавьте org.hibernate.validator:hibernate-validator к вашим зависимостям
  2. пометьте необходимые аргументы метода @javax.validation.constraints.NotNull

тогда, когда вы вызываете такой метод и не предоставляете требуемый аргумент, вы получите исключение javax.validation.ConstraintViolationException.

другой подход, намного более простой, заключается в использовании метода Ломбока: просто отметьте методаргумент с @lombok.NonNull и Ломбок сделает все остальное.

0 голосов
/ 20 ноября 2018

Вы можете написать свою собственную @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();
     }
  }
}

Тогда вы можете использовать это так:

@NotNullArgs
void methodToCall(Obj arg1, Obj arg2) { .... }

Это всего лишь черновик, но вы можете использовать этот код как точку для начала

...