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

我正在创建一个 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)


@RestController

public 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")


至尊宝的传说
浏览 268回答 3
3回答

HUH函数

如果使用方法参数验证,则应使用 对控制器进行批注,如文档所述:@Validated要获得 Spring 驱动方法验证的资格,所有目标类都需要使用 Spring 的注释进行注释。((可选)还可以声明要使用的验证组。有关 Hibernate Validator 和 Bean Validation 1.1 提供程序的设置详细信息,请参阅 javadoc。@ValidatedMethodValidationPostProcessor这意味着您应该将代码更改为:@Validated // Add this@RestControllerpublic class MyApi {&nbsp; &nbsp; // ...}之后,如果验证不匹配,它将抛出一个。ContraintViolationException但请注意,由于您只有注释,因此如果您不提供 ,则集合将是,并且该集合也将有效。如果不希望这样做,则还应添加批注,或从 中删除值。@Size()programEndTimenull@NotNullrequired = false@RequestParam不能使用 though 来检索错误,因为这仅适用于模型属性或请求正文。您可以做的是为 定义一个异常处理程序:BindingResultConstraintViolationException@ExceptionHandler(ConstraintViolationException.class)public void handleConstraint(ConstraintViolationException ex) {&nbsp; &nbsp; System.out.println("Error");}

桃花长相依

根据 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)有关详细信息,请查看容器元素约束。

慕妹3242003

您可以使用类和@RequestBody进行参数验证,这像我一样成功。public class Test {&nbsp; &nbsp; @Size(min = 1 , max = 5)&nbsp; &nbsp; private List<String> programEndTime;&nbsp; &nbsp; public List<String> getProgramEndTime() {&nbsp; &nbsp; &nbsp; &nbsp; return programEndTime;&nbsp; &nbsp; }&nbsp; &nbsp; public void setProgramEndTime(List<String> programEndTime) {&nbsp; &nbsp; &nbsp; &nbsp; this.programEndTime = programEndTime;&nbsp; &nbsp; }}&nbsp; &nbsp; @PostMapping("test")&nbsp; &nbsp; public void test( @Valid&nbsp; &nbsp;@RequestBody Test test,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;BindingResult result){&nbsp; &nbsp; &nbsp; &nbsp; if (result.hasErrors()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Error");&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("OK");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(",.,.");&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java