如何验证类型为List的@RequestParam的大小
我正在创建期望@RequestParam
类型为Spring-Boot的微服务REST API
List<String>
。如何验证列表包含最小和最大数量的值?
到目前为止,我已经尝试使用@Size(min=1,
max=2)应该也支持集合(javax.validation.constraints.Size
)的方法。
我也尝试添加@Valid
和BindingResult
参数以及@Size
注释,但均未成功。
我更喜欢使用类似于第一个示例的解决方案,该解决方案@Size(min=1, max=2)
更紧凑,更简洁。这是针对Spring-Boot
2.1.2.RELEASE的。
@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")
能够达到要求,但实际上已被跳过。
回答:
如果您使用的是方法参数验证,则应使用注释注释控制器@Validated
,如文档所述:
为了有资格通过Spring驱动的方法验证,所有目标类都需要使用Spring的
@Validated
注释进行注释。(可选地,您也可以声明要使用的验证组。)有关MethodValidationPostProcessor
HibernateValidator和Bean Validation 1.1提供程序的设置详细信息,请参见javadoc。
这意味着您应该将代码更改为:
@Validated // Add this@RestController
public class MyApi {
// ...
}
此后,ContraintViolationException
如果验证不匹配,它将抛出。
但是请注意,由于只有@Size()
注释,所以如果不提供programEndTime
,集合将是null
并且也将是有效的。如果您不希望这样做,则还应添加@NotNull
注释,或required
= false从中删除值@RequestParam
。
您不能使用BindingResult
While来检索错误,因为这仅适用于模型属性或请求主体。您可以做的是为定义一个异常处理程序ConstraintViolationException
:
@ExceptionHandler(ConstraintViolationException.class)public void handleConstraint(ConstraintViolationException ex) {
System.out.println("Error");
}
以上是 如何验证类型为List的@RequestParam的大小 的全部内容, 来源链接: utcz.com/qa/428371.html