ConstraintValidation не работает для запроса Api Rest - PullRequest
0 голосов
/ 06 апреля 2020

Я создал API и добавил пользовательскую аннотацию для проверки объекта тела запроса, но это никогда не вызывалось. Ниже находится Объект. Пожалуйста go через код и помогите мне, где код должен быть исправлен?

@ NotNull, @Size также не работает

Запрос Body Object

@Getter
@AllArgsConstructor
@Sample
public class SaleRequest {
    @NotNull
    private Integer sale;
    @NotNull
    private Date dateTime;
    @NotNull
    @Size(min = 10, max = 10)
    private String customerId;
}

Аннотация

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {SalesRequestValidator.class})
@Documented
public @interface Sample {
    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };


    String message() default "Invalid Sale Request";
}

Validator

public class SalesRequestValidator implements ConstraintValidator<Sample, SaleRequest> {
    private String message;

    @Override
    public void initialize(Sample constraintAnnotation) {
        this.message = constraintAnnotation.message();
    }

    @Override
    public boolean isValid(SaleRequest sale, ConstraintValidatorContext context) {
        System.out.println("Tested!");
        return sale.getSale() > 0;
    }

}

API Реализация

public interface SalesApi {
    @RequestMapping(
            value = {"/sales"},
            produces = {"application/json"},
            consumes = {"application/json"},
            method = {RequestMethod.POST}
    )
    ResponseEntity<Integer> submitSale(@RequestBody @Valid SaleRequest saleRequest);
  }

Не могу понять, где я ошибся

1 Ответ

0 голосов
/ 06 апреля 2020

Реализация выглядит нормально.

Убедитесь, что вы установили аннотацию @Valid в методе вашего контроллера, где вы ожидаете получить тело запроса SaleRequest.

Это должно выглядеть примерно так : addNewSaleRequest(@RequestBody @Valid SaleRequest saleRequest)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...