Java 在用于不同API的相同DTO上进行Spring引导请求主体验证

Java 在用于不同API的相同DTO上进行Spring引导请求主体验证,java,spring,spring-boot,spring-mvc,Java,Spring,Spring Boot,Spring Mvc,在我的请求主体DTO中,我希望其中一个API需要特定字段,但另一个API不需要特定字段 我的请求机构: @数据 类MyClass{ @NotNull 私有字符串全名; @NotNull 私有字符串名; @NotNull 私有字符串lastName; } 我希望/api/v1需要全名,但/api/v2不需要。我使用的是来自javax的@Valid请求体。验证您必须使用Spring的@Validated,它是JSR-303的@Valid的变体。这在方法级别使用: 控制器: @RequestMapp

在我的请求主体DTO中,我希望其中一个API需要特定字段,但另一个API不需要特定字段

我的请求机构:

@数据
类MyClass{
@NotNull
私有字符串全名;
@NotNull
私有字符串名;
@NotNull
私有字符串lastName;
}

我希望
/api/v1
需要
全名,但
/api/v2
不需要。我使用的是来自javax的
@Valid
请求体。验证

您必须使用Spring的
@Validated
,它是JSR-303的
@Valid
的变体。这在方法级别使用:

控制器:

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

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

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

@RequestMapping(value = "apiV2Method")
public String apiV2Method(@Validated(Account. ValidationAPI2.class) MyClassDTO myClassDTO) {...}
类MyClassDTO{
公共接口验证API1{}
公共接口验证PI2{}
@NotNull(组={ValidationAPI1.class})
私有字符串全名;
@NotNull(组={ValidationAPI1.class,ValidationAPI2.class})
私有字符串名;
@NotNull(组={ValidationAPI1.class,ValidationAPI2.class})
私有字符串lastName;
...
}

您必须使用Spring的
@Validated
,它是JSR-303的
@Valid
的变体。这在方法级别使用:

控制器:

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

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

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

@RequestMapping(value = "apiV2Method")
public String apiV2Method(@Validated(Account. ValidationAPI2.class) MyClassDTO myClassDTO) {...}
类MyClassDTO{
公共接口验证API1{}
公共接口验证PI2{}
@NotNull(组={ValidationAPI1.class})
私有字符串全名;
@NotNull(组={ValidationAPI1.class,ValidationAPI2.class})
私有字符串名;
@NotNull(组={ValidationAPI1.class,ValidationAPI2.class})
私有字符串lastName;
...
}