簡體   English   中英

使用列表驗證請求<Integer>作為帶有 javax.validation 的字段

[英]Validate request with List<Integer> as a field with javax.validation

我正在使用javax.validation來驗證使用 spring 開發的 API 中的請求。

我必須驗證List<Integer>以便所有值都必須是正數,並且列表的大小必須完全等於某個固定數,例如 2。

public class RequestPoJo {

    private List<Integer> values;

}   

有效的請求應該是 [1,2]

無效請求應該是 [-1,2] 或 [1,2,3]

編輯:

剛剛意識到您想要如何獲得有效載荷。 在這種情況下,我認為最好是編寫自己的約束驗證器(注釋):

注解:

import javax.validation.Constraint;
import javax.validation.Payload;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@NotNull
@Size(min = 2, max = 2)
@Target( { METHOD, FIELD, ANNOTATION_TYPE, PARAMETER})
@Retention(RUNTIME)
@Constraint(validatedBy = {ValidRequestArrayValidator.class})
@Documented
public @interface ValidRequestArray {

        String message() default "{com.mycompany.constraints.ValidRequestArray}";

        Class<?>[] groups() default {};

        Class<? extends Payload>[] payload() default {};
}

驗證器:

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.List;

public class ValidRequestArrayValidator implements ConstraintValidator<ValidRequestArray, List<Integer>> {
    @Override
    public boolean isValid(List<Integer> value, ConstraintValidatorContext context) {
        return value.stream().noneMatch(n -> n < 0);
    }
}

休息控制器:

@RestController
@Validated
public class TestController  

    
    @RequestMapping("/test")
    void test(
            @RequestBody
            @ValidRequestArray
                    List<Integer> values) throws JsonProcessingException {
        System.out.println(new ObjectMapper().writeValueAsString(values));
    }
}

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

如何驗證列表<object>這樣所有數據成員都存在於使用 javax.validation 的請求中?<div id="text_translate"><p> 我正在學習 Spring 引導 bean 驗證,並希望在父實體中存在的 List 中實現自定義驗證,以便發送更精確的錯誤作為響應。 請提出解決方案。在此先感謝。<br></p><p> 我有一個申請人 Pojo class 如下</p><pre>@Builder @Data @NoArgsConstructor @AllArgsConstructor public class Applicant{ @NotEmpty (message="name is mandatory") private String name; @NotEmpty (message="addresses is mandatory") @Valid private List&lt;Address&gt; addresses; }</pre><p> 地址 Class 如下。</p><pre> @Builder @Data @NoArgsConstructor @AllArgsConstructor public class Address{ @NotEmpty (message="Line1 is mandatory") private String line1; @NotEmpty (message="Line2 is mandatory") private String line2; @NotEmpty (message="pinCode is mandatory") private String pinCode; }</pre><p> class 申請人的示例請求正文如下</p><pre>{ "name":"hello", "addresses":[{ "line1":"Line1", "pinCode":"pinCode" }, { "line2":"Line2", "pinCode":"pinCode" }] }</pre><p> Output 使用默認驗證如下。</p><pre> { "timestamp": "2020-08-15T09:29:30.807+0000", "status": 400, "errors": [ "Line2 is mandatory", "Line1 is mandatory" ] }</pre><p> 我想實現自定義驗證,例如 output 將如下所示。</p><pre> { "timestamp": "2020-08-15T09:29:30.807+0000", "status": 400, "errors": [ "Line2 is mandatory in record 1 of addresses", "Line1 is mandatory in record 1 of addresses" ] }</pre><p> “Line2 is required in record 1 of addresses”表示地址 Json 數組中的記錄 1 是強制性的,並且請求正文中不存在標記。</p></div></object>

[英]How to validate List<Object> such that all the data member is present in the request using javax.validation?

暫無
暫無

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

相關問題 javax.validation 來驗證值列表? 如何驗證列表<object>這樣所有數據成員都存在於使用 javax.validation 的請求中?<div id="text_translate"><p> 我正在學習 Spring 引導 bean 驗證,並希望在父實體中存在的 List 中實現自定義驗證,以便發送更精確的錯誤作為響應。 請提出解決方案。在此先感謝。<br></p><p> 我有一個申請人 Pojo class 如下</p><pre>@Builder @Data @NoArgsConstructor @AllArgsConstructor public class Applicant{ @NotEmpty (message="name is mandatory") private String name; @NotEmpty (message="addresses is mandatory") @Valid private List&lt;Address&gt; addresses; }</pre><p> 地址 Class 如下。</p><pre> @Builder @Data @NoArgsConstructor @AllArgsConstructor public class Address{ @NotEmpty (message="Line1 is mandatory") private String line1; @NotEmpty (message="Line2 is mandatory") private String line2; @NotEmpty (message="pinCode is mandatory") private String pinCode; }</pre><p> class 申請人的示例請求正文如下</p><pre>{ "name":"hello", "addresses":[{ "line1":"Line1", "pinCode":"pinCode" }, { "line2":"Line2", "pinCode":"pinCode" }] }</pre><p> Output 使用默認驗證如下。</p><pre> { "timestamp": "2020-08-15T09:29:30.807+0000", "status": 400, "errors": [ "Line2 is mandatory", "Line1 is mandatory" ] }</pre><p> 我想實現自定義驗證,例如 output 將如下所示。</p><pre> { "timestamp": "2020-08-15T09:29:30.807+0000", "status": 400, "errors": [ "Line2 is mandatory in record 1 of addresses", "Line1 is mandatory in record 1 of addresses" ] }</pre><p> “Line2 is required in record 1 of addresses”表示地址 Json 數組中的記錄 1 是強制性的,並且請求正文中不存在標記。</p></div></object> JSR 303-javax.validation-驗證日期 Javax.Validation - 允許 null 但如果值不是則驗證 使用javax.validation驗證帶有選擇項的bean 是否有任何javax.validation Bean注釋來驗證以下規則? javax.validation:以字節為單位驗證字符串長度的約束 Javax.validation - 如何使用指定日期驗證 Date 屬性 使用 javax.validation 進行自定義驗證 在Spring 4 MVC中如何使用javax.validation和JSON請求?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM