字符串列表的 Spring Boot 输入验证仅返回第一个无效值

问题描述

我们使用 Spring boot 的 Hibernate Bean 验证来验证我的控制器的输入请求值,其中包含字符串列表。我们使用正则表达式来验证列表中的每个字符串。 RegEx 有效,但即使列表包含多个无效值,它也只返回一个 FieldError。

Sub Copyvalue()

' create variable with candidate output range
dim dest as range
set dest = Sheets("5S Performance").Range("B39")

' if dest already has a value then re-set dest to a different location

' make whatever modification you want here - I am just suggesting end down
if not isempty(dest.value) then 
  if not isempty(dest.offset(1,0).value) then set dest = dest.end(xlDown)
endif
set dest=dest.offset(1,0)

Sheets("Score Card").Range("E36").Copy Destination:=dest

End Sub

我在控制器的异常处理程序中捕获了验证错误:

class MyIncomingRequest {
   @Schema(example = "[\"3FA6P0H71HR224953\"]")
   @NotEmpty(message = "Vin cannot be empty")
   private List<@Valid @Size(min=17,max=17) @Pattern(regexp = someRegEx) String> vins;
}

class MyResponse {
   List<String> errors = new ArrayList<>();
}

问题是我们永远不会看到一个以上的 FieldError,即使我们使用包含多个无效输入字符串的输入 JSON 进行测试也是如此。例如,假设以下两个值无效:

@ExceptionHandler
public ResponseEntity<MyResponse> handleException(MethodArgumentNotValidException e) {
   MyResponse response = new MyResponse();
   for (FieldError fieldError : e.getBindingResult().getFieldErrors()) {
      errors.add(fieldError.getDefaultMessage();
   }
}

对于第一个输入值,我们会得到一个 FieldError,但不会同时出现。为什么是这样?我见过几个循环遍历所有 FieldError 的代码示例,因此我假设可以对传入列表的每个元素执行验证。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)