簡體   English   中英

如何通過組合 2 個字段來使用 @NotEmpty?

[英]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 個單獨的請求。 那么,有沒有什么可以使字段之一不為空? 我也不確定它是否解決了我的問題,因為在這個場景中請求不知道哪個屬性不應該為空。 任何想法來解決這個問題?

  1. 您可以使用自定義驗證器(spring、代碼驗證、無 javax.)來完成。

  2. 使用 javax.validation:

    • 聽起來很適合您的場景。
    • 當然也可以通過自定義約束實現。 (類似於 1。)

    缺點:你必須處理你的“驗證結構”( @Valid vs @validated /how to pass the group

  3. ...

您可以對約束進行分組,以便您可以確定在每種情況下要驗證哪些屬性。 第一步是將屬性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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM