[英]How do I handle an unknown number of RequestParams in Spring Boot REST?
[英]Spring Rest - bind nested DTO object to @RequestParams
我想将 get 参数绑定到我的 DTO。 我的问题是映射我的 DTO 拥有的嵌套列表。
controller class:
@PostMapping(value = "test-endpoint")
public ResponseEntity<String> doStuff(@Valid @RequestParams MyDto myDto) {
// do stuff
}
父 DTO:
public class MyDto {
@NotNull
private String fieldA;
@Valid
@NotNull
private List<MyNestedDto> nestedDto;
}
嵌套 DTO:
public class MyNestedDto {
@NotNull
private String nestedFieldA;
@NotNull
private String nestedFieldB;
// more fields
}
我有一个向我的 controller 发送 POST 请求的服务。 请求无法更改,因此我不能使用@RequestBody
注释。
请求如下所示:
http://localhost:8080/api/test-endpoint?nestedDto={"more":[{"nestedFieldA":"example","nestedFieldB":"example"}]}&fieldA=123
有没有办法绑定嵌套列表来获取参数?
编辑*
注册转换器似乎不起作用,甚至没有调用我的转换器转换方法。
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new MyConverter());
}
}
public class MyConverter implements Converter<String, MyDto> {
@Override
public MyDto convert(String source) {
// it never reaches there
ObjectMapper objectMapper = new ObjectMapper();
return null; // return null for testing purposes
}
}
public class AController {
private final ObjectMapper objectMapper;
private final Validator validator;
public AController(ObjectMapper objectMapper,Validator validator){
this.objectMapper = objectMapper;
this.validator = validator;
}
@PostMapping(value = "test-endpoint")
public ResponseEntity<String> doStuff(@RequestParam("nestedDto") String nestedDto) {
MyDto myDto = objectMapper.readValue(nestedDto);
Set<ConstraintViolation<MyDto>> constraintViolation =
validator.validate(myDto);
if (!constraintViolation.isEmpty()) {
throw new ConstraintViolationException(constraintViolation);
}
}
}
这是伪代码,所以我只是写它来演示如何解决问题。 如果你想要更优雅的方式,你必须改变请求,因为这里的请求是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.