Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring环境中使用bean集成时,如何指定ApacheCamel数据格式?_Java_Spring_Apache Camel - Fatal编程技术网

Java 在spring环境中使用bean集成时,如何指定ApacheCamel数据格式?

Java 在spring环境中使用bean集成时,如何指定ApacheCamel数据格式?,java,spring,apache-camel,Java,Spring,Apache Camel,如何表明我的端点(或者理想情况下,全局:所有端点)在发送之前需要将POJO转换为application/json格式 比如说,我有一个REST控制器,它将端点注入rabbitmq交换,我希望通过此交换发送的对象序列化为json,某种程度上如下所示: @RestController public class Partners { @EndpointInject(uri = "rabbitmq:core/partners/create") private ProducerTempla

如何表明我的端点(或者理想情况下,全局:所有端点)在发送之前需要将POJO转换为
application/json
格式

比如说,我有一个REST控制器,它将端点注入rabbitmq交换,我希望通过此交换发送的对象序列化为json,某种程度上如下所示:

@RestController
public class Partners {
    @EndpointInject(uri = "rabbitmq:core/partners/create")
    private ProducerTemplate partnersCreate;

    @RequestMapping("/partners/create")
    public Partner create(Partner partner) {

        return partnersCreate.requestBody(partner, Partner.class);
    }
}
但问题是骆驼显然不知道如何处理POJO:

org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: com.example.core.client.model.Partner to the required type: byte[] with value com.example.core.client.model.Partner@29069cf5
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:206) ~[camel-core-2.21.1.jar:2.21.1]
at org.apache.camel.component.rabbitmq.RabbitMQMessagePublisher.publish(RabbitMQMessagePublisher.java:86) ~[camel-rabbitmq-2.21.1.jar:2.21.1]
at org.apache.camel.component.rabbitmq.RabbitMQEndpoint.publishExchangeToChannel(RabbitMQEndpoint.java:216) ~[camel-rabbitmq-2.21.1.jar:2.21.1]
at org.apache.camel.component.rabbitmq.RabbitMQProducer$2.doWithChannel(RabbitMQProducer.java:289) ~[camel-rabbitmq-2.21.1.jar:2.21.1]
at org.apache.camel.component.rabbitmq.RabbitMQProducer$2.doWithChannel(RabbitMQProducer.java:286) ~[camel-rabbitmq-2.21.1.jar:2.21.1]
at org.apache.camel.component.rabbitmq.RabbitMQProducer.execute(RabbitMQProducer.java:90) ~[camel-rabbitmq-2.21.1.jar:2.21.1]
at org.apache.camel.component.rabbitmq.RabbitMQProducer.basicPublish(RabbitMQProducer.java:286) ~[camel-rabbitmq-2.21.1.jar:2.21.1]
at org.apache.camel.component.rabbitmq.RabbitMQProducer.processInOut(RabbitMQProducer.java:244) ~[camel-rabbitmq-2.21.1.jar:2.21.1]
at org.apache.camel.component.rabbitmq.RabbitMQProducer.process(RabbitMQProducer.java:193) ~[camel-rabbitmq-2.21.1.jar:2.21.1]
at org.apache.camel.processor.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:186) ~[camel-core-2.21.1.jar:2.21.1]
at org.apache.camel.processor.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:86) ~[camel-core-2.21.1.jar:2.21.1]
at org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:541) ~[camel-core-2.21.1.jar:2.21.1]
at org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:506) ~[camel-core-2.21.1.jar:2.21.1]
at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:369) ~[camel-core-2.21.1.jar:2.21.1]
at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:506) ~[camel-core-2.21.1.jar:2.21.1]
at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:264) ~[camel-core-2.21.1.jar:2.21.1]
at org.apache.camel.impl.DefaultProducerTemplate.requestBody(DefaultProducerTemplate.java:325) ~[camel-core-2.21.1.jar:2.21.1]
at com.example.admin.backend.api.Partners.create(Partners.java:16) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_152]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_152]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_152]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_152]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE]
尽管

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-jackson-starter</artifactId>
  <version>2.21.1</version>
</dependency>

org.apache.camel
骆驼杰克逊起动器
2.21.1

位于pom.xml中。我的猜测是,除了简单地注册一种数据格式之外,我还必须以某种方式告诉Camel使用它,但目前我想知道它到底是如何使用的。

多亏了@hk6279,通过添加一个配置类解决了这个问题:

@Configuration
public class CamelContextConfig implements CamelContextConfiguration {
    @Override
    public void beforeApplicationStart(CamelContext camelContext) {

    }

    @Override
    public void afterApplicationStart(CamelContext camelContext) {
        camelContext.getGlobalOptions().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
        camelContext.getGlobalOptions().put(JacksonConstants.TYPE_CONVERTER_TO_POJO, "true");
    }
}

将Jackson添加到TypeConverter?请参阅“将Jackson与Camel的TypeConverters集成”一节。您需要将Jackson注释添加到POJO中,否则POJO将不知道如何将其解析为JSON。@hk6279谢谢,我很快会发布解决方案。@noMad17不,我不知道。