javax-validation 注释不适用于声明为另一个 ObjectType 的成员变量

javax-validation annotation is not working for member variables that is declared as another ObjectType

我在父项中添加了注释 class。 它工作正常。

但它在声明为另一种对象类型的成员变量中不起作用。正在验证:

但它没有验证 CustomerRequest 中的 customerRoleType

此外,我想在 customerRequests 中添加 @NotBlank 注释。但它没有使用这个,尽管它使用了 @NotEmpty 注释。

Class MerchantApplicationRequest

@JsonIngnoreProperties(ignoreUnknown=false) 
public class  MerchantApplicationRequest extends IomBaseDTO {
    @NotEmpty(message="customerRequests is mandatory")
    private List<CustomerRequest> customerRequests;
    @NotBlank(message="referenceNumber is mandatory")
    private String referenceNumber ;
}

Class CustomerRequest

public class  CustomerRequest  { 
    @NotBlank(message="customerRoleType is mandatory")
    private String customerRoleType ;
}

控制器class

应用验证的方法:

    @PostMapping("/orderDetail")
    public void orderDetail(@Valid @RequestBody MerchantApplicationRequest request) {
       
        try {
            iOrderService.updateProductDetail(request);
        } catch (Exception e) {
            // ...
        }
    }

这是我的 JSON 负载:

    {
       "orderId" : 101,
       "referenceNumber" : "123",
       "customerRequests" : [ {
         "customerRoleType" : null
       }]
    }

我在 Spring 引导应用程序的 pom.xml 中使用:

<dependency> 
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
</dependency>

如果要级联验证,则必须添加 @Valid 注释:

@Valid
@NotEmpty(message="customerRequests is mandatory")
private List<CustomerRequest> customerRequests;

请阅读 Hibernate 验证文档中有关级联的更多信息:Example 2.11: Cascaded validation

使用 bean-validation (javax.validation),您可以为集合的元素添加验证。

使用 Bean-Validation 1.0

@JsonIngnoreProperties(ignoreUnknown=false) 
public class  MerchantApplicationRequest extends IomBaseDTO {

    @NotEmpty(message="customerRequests is mandatory")
    @Valid
    private List<CustomerRequest> customerRequests;

    @NotBlank(message="referenceNumber is mandatory")
    private String referenceNumber ;
}

另请参阅:

自 Bean-Validation 2.0 以来的备选方案

在 Java 中,也可以通过在菱形运算符中的类型之前添加注释来验证 8 个泛型类型,例如<@Valid CustomerRequest>。这是定义每个元素验证的更简洁的方法。它具有与传统方式相同的效果,验证 class (CustomerRequest).

中定义的每个给定元素

另请参阅: