在我的REST API的put请求中,我想发送DTO的列表。这些DTO中的每一个都有字段 value,我想验证。如果我有自定义DTO来保存我的DTO列表,则验证有效。如下所示:
@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
public class RestController {
private final RestService restService;
@PutMapping
public void update(@RequestBody @Valid ListOfDtos listOfDtos) {
return restService.update(listOfDtos.getDtos());
}
}
@Data
public class ListOfDtos {
@Valid
private List<@Valid DTO> dtos;
}
@Data
public class DTO {
@Pattern(regexp = "[^~]+") //do not allow any string containing '~'
private String value;
字符串
但我想通过不使用ListOfDtos对象来简化我的代码。我希望它只需要修改RestController.update方法就可以工作,如下所示:
@PutMapping
public void update(@RequestBody List<@Valid DTO> dtos) {
return restService.update(dtos);
}
型
但是在这个更改之后,我的DTO没有被验证。@RequestBody @Valid List<@Valid DTO> dtos
你能解释一下为什么这不起作用吗?以及如何在不添加封装ListOfDtos类的情况下修复它?
1条答案
按热度按时间6jygbczu1#
解决这个问题的唯一优雅的方法是使用Lombok,就像@laffuste在这个question中提出的那样。
字符串
解释为什么这不工作是在同一个question。