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

我正在创建期望@RequestParam类型为Spring-Boot的微服务REST API

List<String>。如何验证列表包含最小和最大数量的值?

到目前为止,我已经尝试使用@Size(min=1,

max=2)应该也支持集合(javax.validation.constraints.Size)的方法。

我也尝试添加@ValidBindingResult参数以及@Size注释,但均未成功。

我更喜欢使用类似于第一个示例的解决方案,该解决方案@Size(min=1, max=2)更紧凑,更简洁。这是针对Spring-Boot

2.1.2.RELEASE的。

@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")能够达到要求,但实际上已被跳过。

回答:

如果您使用的是方法参数验证,则应使用注释注释控制器@Validated,如文档所述:

为了有资格通过Spring驱动的方法验证,所有目标类都需要使用Spring的@Validated注释进行注释。(可选地,您也可以声明要使用的验证组。)有关MethodValidationPostProcessorHibernate

Validator和Bean Validation 1.1提供程序的设置详细信息,请参见javadoc。

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

@Validated // Add this

@RestController

public class MyApi {

// ...

}

此后,ContraintViolationException如果验证不匹配,它将抛出。

但是请注意,由于只有@Size()注释,所以如果不提供programEndTime,集合将是null并且也将是有效的。如果您不希望这样做,则还应添加@NotNull注释,或required

= false从中删除值@RequestParam

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

@ExceptionHandler(ConstraintViolationException.class)

public void handleConstraint(ConstraintViolationException ex) {

System.out.println("Error");

}

以上是 如何验证类型为List的@RequestParam的大小 的全部内容, 来源链接: utcz.com/qa/428371.html

回到顶部