Harsh Kanakhara
Harsh Kanakhara

Reputation: 1163

Spring Boot Request body validation on same DTO used for different API

In my request body DTO, I want specific fields to be required for one of the API but not for another.

My request body:

@Data
class MyClass {
    
    @NotNull
    private String fullName;
    
    @NotNull
    private String firstName;
    
    @NotNull
    private String lastName;
}

I want fullName to be required for /api/v1 but not for /api/v2. I am using @Valid on request body from javax.validation.

Upvotes: 2

Views: 1684

Answers (1)

İsmail Y.
İsmail Y.

Reputation: 3965

You have to use Spring's @Validated, which is a variant of JSR-303's @Valid. This is used at the method-level:

Controller:

@RequestMapping(value = "apiV1Method")
public String apiV1Method(@Validated(Account. ValidationAPI1.class) MyClassDTO myClassDTO) {...}

@RequestMapping(value = "apiV2Method")
public String apiV2Method(@Validated(Account. ValidationAPI2.class) MyClassDTO myClassDTO) {...}

Object:

class MyClassDTO {

    public interface ValidationAPI1 {}
    public interface ValidationAPI2 {}

    @NotNull(groups = {ValidationAPI1.class})
    private String fullName;

    @NotNull(groups = {ValidationAPI1.class, ValidationAPI2.class})
    private String firstName;

    @NotNull(groups = {ValidationAPI1.class, ValidationAPI2.class})
    private String lastName;

    ...
}

Upvotes: 3

Related Questions