[英]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.