我有一个简单的spring网络服务,该服务提供@PostMapping并接受json元素数组。
我希望spring自动验证列表中的每个元素。

@RestController
public class PersonServlet {
    @PostMapping
    public void insertPersons(@RequestBody @Valid List<PersonDto> array) {
    }
}


public class PersonDto {
    @NotBlank
    private String firstname;

    @NotBlank
    private String lastname;
}

以下POST请求应失败,并显示验证错误,即缺少firstname:
[
  {
    "lastname": "john"

  },
  {
    "firstname": "jane",
    "lastname": "doe"
  }
]

结果:该请求未被拒绝。为什么?

旁注:如果我仅使用PersonDto作为参数(而不是列表),并且仅与一个人发送json发布请求,则验证有效且正确地拒绝了该请求。

因此,一般而言,验证批注似乎可以正常工作,但在集合内部无效!

最佳答案

解决方法:以下触发列表验证:

public class PersonDtoList extends ArrayList<PersonDto> {
      @Valid
      public List<PersonDto> getList() {
           return this;
      }
}

public void insertPersons(@RequestBody @Valid PersonDtoList array) {
}

09-26 09:40