首页 > 解决方案 > 引起:org.apache.camel.NoTypeConversionAvailableException:没有可用于从类型转换的类型转换器:POJO 到 byte[]

问题描述

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

我在下面的链接中看到了类似的错误。但是,这对我没有帮助。 org.apache.camel.NoTypeConversionAvailableException:没有可用于从类型转换的类型转换器:

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

错误描述:

org.apache.camel.InvalidPayloadException:没有可用的类型: byte[] 但具有值:银行 [id=1,name=TEST,location=Bangalore] 类型:com.ta.common.bean.Bank on: 消息 [ID-XDNS01271-1534835668677-10-2]。原因:没有类型转换器可用于将类型:com.ta.common.bean.Bank 转换为所需的类型:byte[],值为 Bank [id=1, name=TEST, location=Bangalore]。交换 [ID-XDNS01271-1534835668677-10-1]。原因:[org.apache.camel.NoTypeConversionAvailableException - 没有类型转换器可用于从类型:com.ta.common.bean.Bank 转换为所需类型:byte[],值为 Bank [id=1,name=TEST, location=Bangalore]] 在 org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:117) 在 org.apache.camel.component.netty4.http.DefaultNettyHttpBinding.toNettyRequest(DefaultNettyHttpBinding.java:488) 在 org. org.apache.camel.component.netty4 上的 apache.camel.component.netty4.http.NettyHttpProducer.getRequestBody(NettyHttpProducer.java:65)。 原因: org.apache.camel.NoTypeConversionAvailableException:没有类型转换器 可用于从类型:com.ta.common.bean.Bank 转换为 所需类型:byte[],值为 Bank [id=1, name=TEST, location =Bangalore] at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:206) at 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;  
     }
 }

银行.java:

private int id;

private String name;

private String location;

//Getter & Setter methods

标签: javarestmavenspring-bootapache-camel

解决方案


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

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)....;

或者您可以完全省略 bindingmode。


推荐阅读