繁体   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