java - 用于不同 API 的同一 DTO 上的 Spring Boot 请求主体验证

标签 java spring spring-boot spring-mvc

在我的请求正文 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/

相关文章:

java - spring-boot 2.1.0 mongo - CodecConfigurationException : Can't find a codec for class java. time.Year

spring-boot - 在 Springboot 2.2.6 中找不到 jwt 依赖项

java - 套接字异常 : EACCESS (Permission denied)

java - 如何模拟AppCompatActivity和ListActivity扩展行为

java - 为微服务添加依赖

javascript - 如何使用 Angular JS 将数据保存到数据库中?

java - Spring事务在异常后不回滚

java - 用于集成测试的 Spring-boot 默认配置文件

Java Swing 网格布局 : Accessing Specific Coordinate

java - 默认表模型可编辑