java - 引起: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
解决方案
我无法用上面的代码完全重现错误。当我尝试上面的代码时,这是我得到的异常。
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。
推荐阅读
- git - git:忽略提交的文件以在合并请求(gitlab)中发送而忽略?
- sql - 在查询中为每组选择前 N 个项目 (SQL)
- c++ - 如何修复 C++17 错误:对“字节”的引用不明确
- java - 在 href 按钮 HTML 上使用 Click()
- python - numba 方法返回 nan
- jenkins - Make: *** 没有使目标“干净”的规则。在 Jenkins 管道作业中停止
- tomcat - 启动 hybris 实例时无法启动 solr 服务器
- python - 如何在函数中获取 API 变量作为字符串(python)
- php - Symfony composer.json 更改 /public 目录不适用于 assets:install
- git - 分支中的文件会自动添加到主分支