Как проверить запрос на отдых при весенней загрузке - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь подтвердить свой запрос на отдых в соответствии с существованием некоторых полей.Например, если поле транзакции пусто или не существует в моем объекте запроса, я хочу выдать ошибку клиенту.

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

Как я могу проверить два или более полей в комбинации?

DTO

@FraudRestRequestValidator
public class FraudActionsRestRequest {
private BigDecimal amount;
    private String receiverTransactionDate;
    private String receiverNameSurname;
    private BigDecimal exchangeRate;
    private String transactionReferenceNumber;
    @NotNull
    private String transactionDate;
    @NotNull
    private String transactionTime;
    private String transactionTimeMilliseconds;
    private BigDecimal tlAmount;
    private String channel;
}

АННОТАЦИЯ

@Constraint(validatedBy = FraudActionsRestValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface FraudRestRequestValidator {
    String message() default "Invalid Limit of Code";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

VALIDATOR

public class FraudActionsRestValidator implements ConstraintValidator<FraudRestRequestValidator, FraudActionsRestRequest> {

    @Override
    public void initialize(FraudRestRequestValidator constraintAnnotation) {

    }

    @Override
    public boolean isValid(FraudActionsRestRequest fraudActionsRestRequest, ConstraintValidatorContext constraintValidatorContext) {
        //I will implement my logic in future
        return false;
    }
}

РЕГУЛЯТОР ОТДЫХА

@PostMapping("/getFraudActions")
    public ResponseEntity<?> getFraudActions(@Valid @RequestBody FraudActionsRestRequest fraudActionsRestRequest, Errors errors) throws Exception

Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 января 2019

В вашем собственном валидаторе просто реализуйте логику, которую вы хотите иметь.Вы сделали все правильно, кроме какой-то мелочи:

@Constraint(validatedBy = FraudActionsRestValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidFraudRestRequest {
    String message() default "Invalid Limit of Code";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

public class FraudActionsRestValidator implements ConstraintValidator<ValidFraudRestRequest, FraudActionsRestRequest> {

    @Override
    public void initialize(ValidFraudRestRequest constraintAnnotation) {

    }

    @Override
    public boolean isValid(FraudActionsRestRequest fraudActionsRestRequest, ConstraintValidatorContext constraintValidatorContext) {

        return fraudActionsRestRequest.getTransactionDate() != null && fraudActionsRestRequest.getTransactionTime() != null && additional check you need;
    }
}
0 голосов
/ 21 января 2019

Выглядит все хорошо.

Возможно, вам не хватает аннотации @Validated в классе контроллера остальных,

См. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-validation.html для получения дополнительной информации

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