繁体   English   中英

Spring 在用于不同 API 的相同 DTO 上的启动请求正文验证

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

在我的请求正文 DTO 中,我希望 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) {...}

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;

    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM