简体   繁体   中英

How To Validate Rest Request In Spring Boot

I am trying to validate my rest request according to some fields existance. For example, if transactionDate field is null or didnt exist in my request object, I want to throw an error to client.

I couldn't do it despite the source of this guide and still my requests can pass in controller.

How can I validate two or more fields in combination?

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;
}

ANNOTATION

@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;
    }
}

REST CONTROLLER

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

Thanks.

Looks all okaish.

You might be missing the @Validated annotation on the rest controller class,

See https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-validation.html for more info

In your custom validator just implement logic you want to have. You did everything correct except some minor thing:

@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;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM