spring 未验证dtos列表

ki1q1bka  于 2024-01-05  发布在  Spring
关注(0)|答案(1)|浏览(169)

在我的REST API的put请求中,我想发送DTO的列表。这些DTO中的每一个都有字段 value,我想验证。如果我有自定义DTO来保存我的DTO列表,则验证有效。如下所示:

  1. @RestController
  2. @RequestMapping("/api")
  3. @RequiredArgsConstructor
  4. public class RestController {
  5. private final RestService restService;
  6. @PutMapping
  7. public void update(@RequestBody @Valid ListOfDtos listOfDtos) {
  8. return restService.update(listOfDtos.getDtos());
  9. }
  10. }
  11. @Data
  12. public class ListOfDtos {
  13. @Valid
  14. private List<@Valid DTO> dtos;
  15. }
  16. @Data
  17. public class DTO {
  18. @Pattern(regexp = "[^~]+") //do not allow any string containing '~'
  19. private String value;

字符串
但我想通过不使用ListOfDtos对象来简化我的代码。我希望它只需要修改RestController.update方法就可以工作,如下所示:

  1. @PutMapping
  2. public void update(@RequestBody List<@Valid DTO> dtos) {
  3. return restService.update(dtos);
  4. }


但是在这个更改之后,我的DTO没有被验证。@RequestBody @Valid List<@Valid DTO> dtos你能解释一下为什么这不起作用吗?以及如何在不添加封装ListOfDtos类的情况下修复它?

6jygbczu

6jygbczu1#

解决这个问题的唯一优雅的方法是使用Lombok,就像@laffuste在这个question中提出的那样。

  1. @Data
  2. public class ValidList<E> implements List<E> {
  3. @Valid
  4. @Delegate
  5. private List<E> list = new ArrayList<>();
  6. }
  7. @PutMapping
  8. public void update(@RequestBody @Valid ValidList<DTO> dtos){
  9. return restService.update(dtos);
  10. }

字符串
解释为什么这不工作是在同一个question

相关问题