原因:org.apache.camel.NoTypeConversionAvailableException:没有可用于从类型转换的类型转换器:POJO 到 byte[]

Posted

技术标签:

【中文标题】原因:org.apache.camel.NoTypeConversionAvailableException:没有可用于从类型转换的类型转换器:POJO 到 byte[]【英文标题】:Caused by: org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: POJO to byte[] 【发布时间】:2019-01-27 12:21:36 【问题描述】:

我是 Apache Camel 的新手。我正在使用 REST API 与 Apache Camel 和 Spring Boot 集成。我完成了获取请求,它按预期工作。但是,我在使用 POST 调用发布数据时遇到了一个问题。

我在下面的链接中看到了类似的错误。但是,这对我没有帮助。 org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type:

我也尝试了 ***、youtube 和其他网站上的几种解决方案。但是,没有运气。你能帮我解决这个问题吗,

错误说明:

org.apache.camel.InvalidPayloadException:没有可用的正文类型: byte[] 但有值:Bank [id=1, name=TEST, location=Bangalore] of 类型:com.ta.common.bean.Bank on: 消息 [ID-XDNS01271-1534835668677-10-2]。原因:无类型转换器 可从 type: com.ta.common.bean.Bank 转换为 所需类型:byte[],值为 Bank [id=1, name=TEST, 位置=班加罗尔]。交换 [ID-XDNS01271-1534835668677-10-1]。引起 作者:[org.apache.camel.NoTypeConversionAvailableException - 无类型 转换器可用于从类型:com.ta.common.bean.Bank 转换为 所需类型:byte[],值为 Bank [id=1, name=TEST, 位置=班加罗尔]] 在 org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:117) 在 org.apache.camel.component.netty4.http.DefaultNettyHttpBinding.toNettyRequest(DefaultNettyHttpBinding.java:488) 在 org.apache.camel.component.netty4.http.NettyHttpProducer.getRequestBody(NettyHttpProducer.java:65) 在 org.apache.camel.component.netty4.NettyProducer.process(NettyProducer.java:208) 在 org.apache.camel.component.netty4.http.NettyHttpProducer.process(NettyHttpProducer.java:56) 在 org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148) 在 org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:181) 在 org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) 在 org.apache.camel.processor.Pipeline.process(Pipeline.java:138) 在 org.apache.camel.processor.Pipeline.process(Pipeline.java:101) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) 在 org.apache.camel.component.direct.DirectBlockingProducer.process(DirectBlockingProducer.java:53) 在 org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148) 在 org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:181) 在 org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) 在 org.apache.camel.component.netty4.handlers.ServerChannelHandler.processAsynchronously(ServerChannelHandler.java:141) 在 org.apache.camel.component.netty4.handlers.ServerChannelHandler.channelRead0(ServerChannelHandler.java:112) 在 org.apache.camel.component.netty4.http.handlers.HttpServerChannelHandler.channelRead0(HttpServerChannelHandler.java:213) 在 io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) 在 org.apache.camel.component.netty4.http.handlers.HttpServerMultiplexChannelHandler.channelRead0(HttpServerMultiplexChannelHandler.java:113) 在 io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) 在 io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:38) 在 io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:353) 在 io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:66) 在 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) 在 java.lang.Thread.run(Thread.java:745) 原因: org.apache.camel.NoTypeConversionAvailableException: 没有类型转换器 可从类型:com.ta.common.bean.Bank 转换为 必需类型:byte[],值为 Bank [id=1, name=TEST, location=班加罗尔]在 org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:206) 在 org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:115) ... 29 更多

骆驼路由逻辑如下,

restConfiguration().component("netty4-http").bindingMode(RestBindingMode.json).host("localhost").port(8000);

rest("/api").consumes("application/json").post("/addbank").type(Bank.class).to("direct:addbank");

from("direct:addbank").log("request body :
 $body").to("netty4-http:http://localhost:8181/bank/add?bridgeEndpoint=true").throwException(new
 RuntimeException()).to("direct:cancelAdding");

 from("direct:cancelAdding").log("Cancelled adding bank details");

控制器逻辑是:

@RestController 

@RequestMapping(path="/bank") 

public class BankController    

     List<Bank> bankList = new ArrayList<>();

     @PostMapping(path="/add",consumes="application/json")
     public List<Bank> addBank(@RequestBody @Valid Bank bank) 
        bankList.add(bank);         
      return bankList;  
     
 

Bank.java:

private int id;

private String name;

private String location;

//Getter & Setter methods

【问题讨论】:

我通过邮递员工具将银行值作为一种 JSON 对象发布。 你能显示你的restconfiguration() restConfiguration().component("netty4-http").bindingMode(RestBindingMode.json).host("localhost").port(8000); 我没有收到此错误。对我来说,上面的代码有效。但是有一点变化。从您的 restconfiguration() 中删除这部分 .bindingMode(RestBindingMode.json) 并尝试。或将其设为RestBindingMode.auto。你用的是哪个版本的骆驼? @pvpkiran,非常感谢。删除 .bindingMode(RestBindingMode.json) 解决了这个问题。 【参考方案1】:

我无法用上面的代码完全重现错误。当我尝试上面的代码时,这是我得到的异常。

org.apache.camel.processor.binding.BindingException:无法绑定到 json 作为消息正文与 json 不兼容。 交换[ID-DESKTOP-OS0TDG5-1534851950401-0-1]

解决这个问题是 从

更改休息配置
 restConfiguration().component("netty4-http").host("localhost").bindingMode(RestBindingMode.json)....;

 restConfiguration().component("netty4-http").host("localhost").bindingMode(RestBindingMode.auto)....;

或者您可以完全省略绑定模式。

【讨论】:

我尝试过使用 RestBindingMode.auto。但是,我遇到了同样的问题。我已经完全删除了 bindingMode()。它开始工作了。再次感谢。

以上是关于原因:org.apache.camel.NoTypeConversionAvailableException:没有可用于从类型转换的类型转换器:POJO 到 byte[]的主要内容,如果未能解决你的问题,请参考以下文章

rca根本原因分析法是啥意思

ip、端口 连接失败问题常见原因

在MYSQL里 段错误 是啥原因

“'NSInternalInconsistencyException' 的替代原因,原因:'此 NSPersistentStoreCoordinator 没有持久存储。'”

Oracle连接太慢的原因及TNS无监听程序

ios 开发证书被撤销是啥原因