为了账号安全,请及时绑定邮箱和手机立即绑定

如何验证 List 类型的@RequestParam的大小

如何验证 List 类型的@RequestParam的大小

至尊宝的传说 2022-09-07 16:55:51
我正在创建一个 Spring-Boot 微服务 REST API,该 API 的类型为 .如何验证列表是否包含最小值和最大值?@RequestParamList<String>到目前为止,我已经尝试使用应该支持集合的功能()。@Size(min=1, max=2)javax.validation.constraints.Size我还尝试添加参数和注释,但没有成功。@ValidBindingResult@Size我更喜欢使用类似于第一个示例的解决方案,该解决方案更紧凑,更整洁。这是针对Spring-Boot 2.1.2.RELEASE的。@Size(min=1, max=2)@RestControllerpublic class MyApi {    @GetMapping(value = "/myApi", produces = { APPLICATION_JSON_VALUE })    public ResponseEntity<List<MyObject>> getSomething(@Valid @RequestParam(value = "programEndTime", required = false) @Size(min = 1, max = 2) List<String> programEndTime, BindingResult result) {        if (result.hasErrors()) {            System.out.println("Error");        } else {            System.out.println("OK");        }    }}我希望能够到达该行,但实际上它被跳过了。System.out.println("Error")
查看完整描述

3 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

如果使用方法参数验证,则应使用 对控制器进行批注,如文档所述:@Validated


要获得 Spring 驱动方法验证的资格,所有目标类都需要使用 Spring 的注释进行注释。((可选)还可以声明要使用的验证组。有关 Hibernate Validator 和 Bean Validation 1.1 提供程序的设置详细信息,请参阅 javadoc。@ValidatedMethodValidationPostProcessor


这意味着您应该将代码更改为:


@Validated // Add this

@RestController

public class MyApi {

    // ...

}

之后,如果验证不匹配,它将抛出一个。ContraintViolationException


但请注意,由于您只有注释,因此如果您不提供 ,则集合将是,并且该集合也将有效。如果不希望这样做,则还应添加批注,或从 中删除值。@Size()programEndTimenull@NotNullrequired = false@RequestParam


不能使用 though 来检索错误,因为这仅适用于模型属性或请求正文。您可以做的是为 定义一个异常处理程序:BindingResultConstraintViolationException


@ExceptionHandler(ConstraintViolationException.class)

public void handleConstraint(ConstraintViolationException ex) {

    System.out.println("Error");

}


查看完整回答
反对 回复 2022-09-07
?
桃花长相依

TA贡献1860条经验 获得超8个赞

根据 Bean Validator 2.0、Hibernate Validator 6.x,您可以直接在参数化类型上使用约束。


@GetMapping(path = "/myApi", produces = { APPLICATION_JSON_VALUE })

public ResponseEntity<List<MyObject>> getSomething(@RequestParam(value = "programEndTime", required = false) List<@Size(min = 1, max = 2) String> programEndTimes)

有关详细信息,请查看容器元素约束。


查看完整回答
反对 回复 2022-09-07
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

您可以使用类和@RequestBody进行参数验证,这像我一样成功。


public class Test {

    @Size(min = 1 , max = 5)

    private List<String> programEndTime;


    public List<String> getProgramEndTime() {

        return programEndTime;

    }


    public void setProgramEndTime(List<String> programEndTime) {

        this.programEndTime = programEndTime;

    }

}

    @PostMapping("test")

    public void test( @Valid   @RequestBody Test test,

                     BindingResult result){

        if (result.hasErrors()) {

            System.out.println("Error");

        } else {

            System.out.println("OK");

        }

        System.out.println(",.,.");

    }


查看完整回答
反对 回复 2022-09-07
  • 3 回答
  • 0 关注
  • 266 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信