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



我在父类中添加了注释。

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

  • orderIdfrom基类
  • referenceNumberfromMarchantApplicationRequest
  • MerchantApplicationRequestcustomerRequests字段的@NotEmpty注释

但是没有在CustomerRequest中验证customerRoleType

另外,我想在customerRequests中添加@NotBlank注释。但是它不接受这个,虽然它正在接受@NotEmpty注释。

分类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 ;
}

类别CustomerRequest

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

控制器类

应用验证的方法:

@PostMapping("/orderDetail")
public void orderDetail(@Valid @RequestBody MerchantApplicationRequest request) {

try {
iOrderService.updateProductDetail(request);
} catch (Exception e) {
// ...
}
}

这是我的JSON负载:

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

我在pom.xml中使用Spring Boot应用程序:

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

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

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

请在Hibernate验证文档中阅读更多关于级联的信息:例2.11:级联验证

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

Using 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 ;
}

参见:

  • JSR 303:如何验证一个带注释的对象集合?
  • LogicBig教程:Collection Validation

Alternative since Bean-Validation -2.0

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

参见:

  • java/beans验证- collection/map不包含null
  • Baeldung教程:使用Bean Validation 2.0验证容器元素

相关内容

最新更新