在我的请求正文 DTO 中,我希望其中一个 API 需要特定字段,而另一个 API 则不需要。
我的请求正文:
@Data
class MyClass {
@NotNull
private String fullName;
@NotNull
private String firstName;
@NotNull
private String lastName;
}
我希望 /api/v1
需要 fullName
,但 /api/v2
不需要。我在来自 javax.validation
的请求正文上使用 @Valid
。
最佳答案
您必须使用 Spring 的 @Validated
,它是 JSR-303 的 @Valid
的变体。这是在方法级别使用的:
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) {...}
对象:
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;
...
}
关于java - 用于不同 API 的同一 DTO 上的 Spring Boot 请求主体验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66154658/