Spring Boot如何自定义反序列化

时间:2018-06-26 20:49:38

标签: java spring jackson

关于此主题的话题很多,但是似乎没有一个对我正在尝试做的事情有所帮助。我有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) {}

0 个答案:

没有答案