我已经完全错过了转换器,或者发现的所有示例/博客/文档都假设我已经完成了一步……我的理解是,当我发布String
时,转换器将提取它,并给Controller
一个POJO。
我的问题是转换器从未被调用。
进入控制器的有效负载是标准的JSON API字符串
{
"data":{
"attributes":{
"created-date":null,
},
"type":"steaks"
}
}
转换器:
@Slf4j
@Configuration
public class SteakConverter implements Converter<String, Steak> {
@Override
public Steak convert(String value) {
log.info("converter value {}", value);
return new Steak.builder().build();
}
}
控制器:
@Slf4j
@CrossOrigin
@RestController
public class SteakController {
@PostMapping("/steaks")
public ResponseEntity<String> create(@RequestBody Steak steak) {
}
}
通过阅读所有博客和文档,我发现这应该是所需要的。但是,我也尝试过手动注册以下内容:
@Slf4j
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
log.info("Converter registered");
registry.addConverter(new SteakConverter());
}
}
这在应用程序启动期间被调用。
我唯一能想到的是,转换器/控制器不认为有效负载实际上是字符串,因此忽略它了吗?
我该如何调试它,或者使其工作?
这是显示我的问题的working sample application。
欢呼