Java 无法将消息从Json字符串转换为对象。类卡斯特例外
我使用的是SpringXD,其中有一个带有outputType application/json的兔子源代码。下一个模块接收它并将其转换为Java对象。RabbitMq是我的运输巴士 我的配置非常标准,如:Java 无法将消息从Json字符串转换为对象。类卡斯特例外,java,spring,spring-integration,spring-cloud-dataflow,spring-xd,Java,Spring,Spring Integration,Spring Cloud Dataflow,Spring Xd,我使用的是SpringXD,其中有一个带有outputType application/json的兔子源代码。下一个模块接收它并将其转换为Java对象。RabbitMq是我的运输巴士 我的配置非常标准,如: @EnableIntegration @ImportResource("classpath:some.xml") @ComponentScan(basePackages = "com.something") public class MyConfigClass { @Autowir
@EnableIntegration
@ImportResource("classpath:some.xml")
@ComponentScan(basePackages = "com.something")
public class MyConfigClass {
@Autowired
private Jackson2JsonObjectMapper jackson2JsonObjectMapper;
@Bean
public MessageChannel input() {
return new DirectChannel();
}
@Bean
public MessageChannel inputObject() {
return new DirectChannel();
}
@Bean
public MessageChannel output() {
return new DirectChannel();
}
@Bean
public MessageChannel outputObject() {
return new DirectChannel();
}
@Bean
public Jackson2JsonObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return new Jackson2JsonObjectMapper(mapper);
}
@Bean
@Transformer(inputChannel = "input", outputChannel = "inputObject")
public JsonToObjectTransformer jsonToObjectTransformer() {
return new JsonToObjectTransformer(someTargetClass.class, jackson2JsonObjectMapper);
}
@Bean
@Transformer(inputChannel = "outputObject", outputChannel = "output")
public ObjectToJsonTransformer objectToJsonTransformer() {
return new ObjectToJsonTransformer(jackson2JsonObjectMapper);
}
}
然后在另一节课上,我有这样的东西:
public class AnotherClass {
@Transformer(inputChannel = "inputObject", outputChannel = "outputObject")
public Message<someTargetClass> transform(Message<someTargetClass> incoming) {
//Here I'm getting Caused by: org.springframework.messaging.MessageHandlingException: nested exception is java.lang.ClassCastException: java.lang.String cannot be cast to com.whatever.someTargetClass
SomeTargetClass messagePayload = incoming.getPayload();
}
}
因此,不知何故,通过通道的流量似乎无法正常工作。我遗漏了什么?我的理论是,当转换器接收到字符串时,源代码正在生成一个字符串,即json没有被传输,因此无法将其转换为SomeTargetClass。如果这是真的,那么应该修复它: 在变换方法更改中: SomeTargetClass messagePayload=incoming.getPayload 致: 这是使用小杰克逊,但我相信你可以在杰克逊找到替代者
Caused by: org.springframework.messaging.MessageHandlingException: nested exception is java.lang.ClassCastException: java.lang.String cannot be cast to com.whatever.someTargetClass
at org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:96) ~[spring-integration-core-4.2.5.RELEASE.jar:na]
at org.springframework.integration.transformer.AbstractMessageProcessingTransformer.transform(AbstractMessageProcessingTransformer.java:90) ~[spring-integration-core-4.2.5.RELEASE.jar:na]
at org.springframework.integration.transformer.MessageTransformingHandler.handleRequestMessage(MessageTransformingHandler.java:89) ~[spring-integration-core-4.2.5.RELEASE.jar:na]
... 52 common frames omitted
String jsonString = incoming.getPayload();
SomeTargetClass messagePayload = (SomeTargetClass) JSON.std.beanFrom(SomeTargetClass.class, jsonString);