关于此主题的话题很多,但是似乎没有一个对我正在尝试做的事情有所帮助。我有Controllers
中加入了JSON API Spec's String有效负载,但我想截取传入的有效负载并以自定义方式反序列化它。
所以代码来解释:
@PostMapping("/steaks")
public ResponseEntity<String> create(@RequestBody String payload) {
// JsonTransformService is a custom service which converts the JSON API Spec string into a Steak POJO
final Steak steak = jsonTransformService.read(Steak.class, payload);
// [...] logic to do with a Steak
}
我想拥有的是
@PostMapping("/steaks")
public ResponseEntity<String> create(@RequestBody Steak steak) {
// [...] logic to do with a Steak
}
但是目前我不能这样做,因为有效负载不是反序列化的直接匹配项。
因此,我尝试了扩展MappingJackson2HttpMessageConverter
并覆盖read
方法,但这没有用,因为使用inputMessage
会关闭流。
处理此问题的正确方法是什么?
修改
尝试按照建议的方式使用转换器,但Controller
@Slf4j
@Component
public class SteakConverter implements Converter<String, Steak> {
private final JsonTransformService jsonTransformService;
public SteakConverter(JsonTransformService jsonTransformService) {
this.jsonTransformService = jsonTransformService;
}
@Override
public Steak convert(String value) throws IOException {
log.info("converting {}", value);
return jsonTransformService.read(Steak.class, value);
}
}
并调整了Controller
public ResponseEntity<String> create(@RequestBody Steak steak) {}