Spring rest client + camunda rest api:postForObject只接受camunda.bpm JSONObject但JacksonMessageConverter只接受javax JsonObject

时间:2014-06-06 20:23:13

标签: spring resttemplate jsonobject

我正在尝试使用Springframework的RestTemplate构建一个休息客户端,但问题是我的api是Camunda Rest Api。

这意味着我只能通过JSONObject发送Camunda.bpm的postForObject类型,但我的JacksonJsonConverter仅解析javax的JsonObject

我得到了

no message converter found for the request type camunda JSONObject

当我分别使用bad media type类型和JSONObject类型时,

JsonObject例外。

春天的新事物被困了几天,任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

在对MappingJackson2HttpMessageConverter如何实际工作并仔细研究Camunda REST API的请求内容格式进行一些研究之后,我发现问题在于Jackson转换器无法解析任何不以ArrayList start token开头的内容“[ ”。因为我必须按照Camunda的要求传递带有开头标记“{”的请求,所以我编写了自己的Jackson转换器。具体来说,我重写了Jackson2中的readJavaType()方法:

private Object readJavaType(JavaType javaType, HttpInputMessage inputMessage) {
        try {

            String parseInput = "["+convertStreamToString(inputMessage.getBody())+"]";
            InputStream stream = new ByteArrayInputStream(parseInput.getBytes(StandardCharsets.UTF_8));
            return this.objectMapper.readValue(stream, javaType);
        }
        catch (IOException ex) {
            throw new HttpMessageNotReadableException("Could not read JSON: " + ex.getMessage(), ex);
        }
    }