Reputation: 1163
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
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