簡體   English   中英

我們可以根據請求參數向請求正文添加驗證嗎

[英]Can we add validation to the request body based on the request Parameter

我有一個 REST 端點,它在請求正文中接受一個對象和一個請求參數。 傳遞請求參數時,我需要驗證對象的所有屬性,如果沒有,則參數采用分配的默認值,只需驗證2個屬性。 兩種情況的路徑都需要相同。 如何做到這一點?

目前,我對對象進行了模式、長度和可能值檢查,並在注釋的幫助下進行了驗證。

----- 更新類 -------

@ValidateParent(parent = "parent ", child= "child")
public class anClass{

    @NotNull(groups = {FrstValidator.class, SndValidator.class})
    @Pattern(regexp = "^[a-zA-Z]{3}$",
            groups = {FrstValidator.class, SndValidator.class})
    String str1;

    @NotNull(groups = {FrstValidator.class, SndValidator.class})
    @Pattern(regexp = "^[a-zA-Z]{3}$",
            groups = {FrstValidator.class, SndValidator.class})
    String str2;

    @Pattern(regexp = "^[a-zA-Z]{10}$",
            groups =  SndValidator.class)
    String child;

    @Pattern(regexp = "^[a-zA-Z]{10}$",
            groups = SndValidator.class)
    String parent;

    @Pattern(regexp = "^[a-zA-Z]{10}$",
            groups = SndValidator.class)
    String str3;


}

ValidateParent ,檢查在請求正文中傳遞子項時是否也傳遞了父項。

您可以使用驗證組和兩個單獨的端點以優雅的“Spring 方式”實現您的目標,通過請求參數的存在來區分:

驗證組:

// Validation groups are just marker interfaces
private interface PartialValidation {}
private interface FullValidation {}

請求 DTO:

@Data
private static class Request {
    // This field will be validated only for FullValidation validation group
    @NotNull(groups = FullValidation.class)
    String field1;
    // This field will be validated for both validation groups
    @NotNull(groups = {FullValidation.class, PartialValidation.class})
    String field2;
}

控制器:

// This endpoint is executed only if there is no myParam preprovided
@PostMapping(
    value = "/validation",
    params = "!myParam")
public void partialValidation(
    @RequestParam(defaultValue = "DEFAULT") String myParam,
    // Request is validated against the PartialValidation group
    @RequestBody @Validated(PartialValidation.class) Request request) {

    System.out.println("Partial validation");
}

// This endpoint is executed only if there is myParam preprovided
@PostMapping(
    value = "/validation",
    params = "myParam")
public void fullValidation(
    @RequestParam String myParam,
    // Request is validated against the FullValidation group
    @RequestBody @Validated(FullValidation.class) Request request) {

    System.out.println("Full validation");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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