[英]How to use @NotEmpty by combining 2 fields?
我有以下要求。
@Data
public class ProductRequest {
@NotEmpty
private String code;
@NotEmpty
private String name;
}
我將此請求用於 2 種不同的方法,並且它們都只使用一個字段,不需要另一個字段。 假設方法A使用code
,方法B使用此請求中的name
字段(不需要其他字段)。 所以,在這個場景中,我認為一個解決方案是對兩種方法使用相同的請求,而不是創建 2 個單獨的請求。 那么,有沒有什么可以使字段之一不為空? 我也不確定它是否解決了我的問題,因為在這個場景中請求不知道哪個屬性不應該為空。 任何想法來解決這個問題?
您可以使用自定義驗證器(spring、代碼驗證、無 javax.)來完成。
使用 javax.validation:
缺點:你必須處理你的“驗證結構”( @Valid
vs @validated
/how to pass the group
)
...
您可以對約束進行分組,以便您可以確定在每種情況下要驗證哪些屬性。 第一步是將屬性groups
添加到您的javax驗證注釋中。 為此,您需要創建一些標記接口,用於每個用例:
public interface MethodA { } // You should name this properly, it is just for demonstration purposes
public interface MethodB { }
然后您需要在注釋中配置groups
屬性:
@Data
public class ProductRequest {
@NotEmpty(groups = MethodA.class)
private String code;
@NotEmpty(groups = MethodB.class)
private String name;
}
最后一步是使用@Validated
而不是@Valid
來觸發數據驗證。 大致如下:
@RequestMapping(value = "/methodA", method = RequestMethod.POST)
public String methodA(@Validated(MethodA.class) @RequestBody ProductRequest productRequest) {
(...)
}
@RequestMapping(value = "/methodB", method = RequestMethod.POST)
public String methodB(@Validated(MethodB.class) @RequestBody ProductRequest productRequest) {
(...)
}
您可以在以下在線資源中閱讀更多相關信息:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.