在 JSON 和 POJO 之间使用 REST 时收到“没有类型转换器可用于从类型进行转换”

问题描述 投票:0回答:1

我正在为要在正文中的 DTO 接受的简单帖子定义以下端点。似乎仅在使用 un/marshall 语句时才有效。许多示例不使用 un/marshal 语句。

  1. 需要这些元帅声明吗?
  2. POJO 是从 json -> pojo 和 pojo -> json 转换的吗?

休息端点:

rest://post:saveIDto?inType=ContainerDefinitionDto.class&outType=ContainerDefinitionDto.class&type=ContainerDefinitionDto.class 

*路线 - 直接失败:processRoute

.from("rest://post:saveIDto?inType=ContainerDefinitionDto.class&outType=ContainerDefinitionDto.class&type=ContainerDefinitionDto.class")

// need to insert below to work
//.unmarshal(new JacksonDataFormat(ContainerDefinitionDto.class))
   .log("${body}")
  .to("direct:processRoute")
// need to insert below to work
//.marshal(new JacksonDataFormat(ContainerDefinitionDto.class));");

错误:

org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[]
    at org.apache.camel.CamelExecutionException.wrapCamelExecutionException(CamelExecutionException.java:45)
    at org.apache.camel.support.builder.ExpressionBuilder$35.evaluate(ExpressionBuilder.java:1101)
    at org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:45)
    at org.apache.camel.component.bean.MethodInfo$ParameterExpression.evaluateParameterBinding(MethodInfo.java:743)
    at org.apache.camel.component.bean.MethodInfo$ParameterExpression.evaluateParameterExpressions(MethodInfo.java:623)
    at org.apache.camel.component.bean.MethodInfo$ParameterExpression.evaluate(MethodInfo.java:591)
    at org.apache.camel.component.bean.MethodInfo.initializeArguments(MethodInfo.java:262)
    at org.apache.camel.component.bean.MethodInfo.createMethodInvocation(MethodInfo.java:270)
    at org.apache.camel.component.bean.BeanInfo.createInvocation(BeanInfo.java:279)
    at org.apache.camel.component.bean.AbstractBeanProcessor.useMethodInvocation(AbstractBeanProcessor.java:102)
    at org.apache.camel.component.bean.AbstractBeanProcessor.process(AbstractBeanProcessor.java:88)
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:81)
    at org.apache.camel.component.bean.BeanProducer.process(BeanProducer.java:41)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:172)
    at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.handleFirst(RedeliveryErrorHandler.java:462)
    at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:438)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:163)
    at org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:354)
    at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:330)
    at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:81)
    at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:32)
    at org.apache.camel.component.undertow.UndertowConsumer.handleRequest(UndertowConsumer.java:214)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:393)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859)
    at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
    at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1512)
    at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.apache.camel.InvalidPayloadException: No body available of type: au.com.cs.inventory.api.dto.ContainerDefinitionDto but has type: byte[] on: Message. Caused by: No type converter available to convert from type: byte[] to the required type: au.com.cs.inventory.api.dto.ContainerDefinitionDto. Exchange[]. Caused by: [org.apache.camel.NoTypeConversionAvailableException - No type converter available to convert from type: byte[] to the required type: au.com.cs.inventory.api.dto.ContainerDefinitionDto]
    at org.apache.camel.support.MessageSupport.getMandatoryBody(MessageSupport.java:128)
    at org.apache.camel.support.builder.ExpressionBuilder$35.evaluate(ExpressionBuilder.java:1099)
    ... 32 more
Caused by: org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: byte[] to the required type: au.com.cs.inventory.api.dto.ContainerDefinitionDto
    at org.apache.camel.impl.converter.CoreTypeConverterRegistry.mandatoryConvertTo(CoreTypeConverterRegistry.java:199)
    at org.apache.camel.support.MessageSupport.getMandatoryBody(MessageSupport.java:126)
    ... 33 more
apache-camel
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.