javax-validation 注释不适用于声明为另一个 ObjectType 的成员变量
javax-validation annotation is not working for member variables that is declared as another ObjectType
我在父项中添加了注释 class。
它工作正常。
但它在声明为另一种对象类型的成员变量中不起作用。正在验证:
orderId
来自基地 class
referenceNumber
来自 MarchantApplicationRequest
@NotEmpty
MerchantApplicationRequest
中 customerRequests
字段的注释。
但它没有验证 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 ;
}
另请参阅:
- JSR 303: How to Validate a Collection of annotated objects?
- 逻辑大教程:Collection Validation
自 Bean-Validation 2.0 以来的备选方案
在 Java 中,也可以通过在菱形运算符中的类型之前添加注释来验证 8 个泛型类型,例如<@Valid CustomerRequest>
。这是定义每个元素验证的更简洁的方法。它具有与传统方式相同的效果,验证 class (CustomerRequest
).
中定义的每个给定元素
另请参阅:
我在父项中添加了注释 class。 它工作正常。
但它在声明为另一种对象类型的成员变量中不起作用。正在验证:
orderId
来自基地 classreferenceNumber
来自MarchantApplicationRequest
@NotEmpty
MerchantApplicationRequest
中customerRequests
字段的注释。
但它没有验证 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 ;
}
另请参阅:
- JSR 303: How to Validate a Collection of annotated objects?
- 逻辑大教程:Collection Validation
自 Bean-Validation 2.0 以来的备选方案
在 Java 中,也可以通过在菱形运算符中的类型之前添加注释来验证 8 个泛型类型,例如<@Valid CustomerRequest>
。这是定义每个元素验证的更简洁的方法。它具有与传统方式相同的效果,验证 class (CustomerRequest
).
另请参阅: