Spring集成,如何使用@Transformer转换为/到JSON?

时间:2016-12-16 07:55:18

标签: json annotations spring-integration

我的问题是如何在SI端点之间传递对象?

我发现的几乎每个例子都使用XML设置,我使用Annotation并且不知道如何解决此异常

Caused by: java.lang.IllegalArgumentException: Could not resolve 'json__TypeId__' in 'javaTypes'.
    at org.springframework.integration.support.json.AbstractJacksonJsonObjectMapper.createJavaType(AbstractJacksonJsonObjectMapper.java:68)
    at org.springframework.integration.support.json.Jackson2JsonObjectMapper.extractJavaType(Jackson2JsonObjectMapper.java:116)
    at org.springframework.integration.support.json.Jackson2JsonObjectMapper.extractJavaType(Jackson2JsonObjectMapper.java:52)
    at org.springframework.integration.support.json.AbstractJacksonJsonObjectMapper.fromJson(AbstractJacksonJsonObjectMapper.java:61)
    at org.springframework.integration.json.JsonToObjectTransformer.doTransform(JsonToObjectTransformer.java:87)
    at org.springframework.integration.transformer.AbstractTransformer.transform(AbstractTransformer.java:33)
    ... 18 more

人们建议使用xml来解决此问题,例如

<bean class="org.springframework.amqp.support.converter.DefaultClassMapper">
    <property name="defaultType" value="foo.MyObject" />
</bean>

但我正在使用注释创建变换器来处理从频道接收的消息,比如

    @Bean
    @Transformer(inputChannel="fromTcp", outputChannel="toHandler")
    JsonToObjectTransformer jsonToObjectTransformer() {
        ObjectMapper mapper = new ObjectMapper();       
        JsonObjectMapper<JsonNode, JsonParser> jm = new Jackson2JsonObjectMapper(mapper);
        return new JsonToObjectTransformer(jm);
    }

实际上我不知道如何在SI端点之间传递对象。我只能传递String和SI使用默认序列化来处理String到byte [],并将byte []处理为String。

1 个答案:

答案 0 :(得分:3)

转换器需要知道要转换的类型;你得到的错误是因为你没有提供一个类型,所以它回退到寻找包含类型信息的标题。

xml的等价物是:

@Bean
@Transformer(inputChannel="fromTcp", outputChannel="toHandler")
JsonToObjectTransformer jsonToObjectTransformer() {
    return new JsonToObjectTransformer(MyObject.class);
}