Есть множество тем на эту тему, но, похоже, ни одна из них не помогает в том, что я пытаюсь сделать. У меня есть полезные нагрузки JSON API Spec'ed String, входящие в Controllers
, но я бы хотел перехватить входящую полезную нагрузку и десериализовать ее по своему усмотрению.
Итак, код для объяснения:
@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) {}