java - Apache Camel REST 端点未返回最终正文
问题描述
我已经声明了一个 REST 端点,它使用direct
. 在第二条路线的最后,我正在记录正文,但它与返回浏览器的正文不同。
这是一个重现该行为的小示例(我正在使用带有 Spring Boot 的 Apache Camel):
@Component
public class EntidadeRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
restConfiguration().bindingMode(json);
rest("/entidade")
.get("/{id}")
.to("direct:search-by-id");
from("direct:search-by-id")
.routeId("search-by-id")
.setProperty("idEntidade", simple("${header.id}"))
.pollEnrich("file:files/mock/dados?noop=true&idempotent=false")
.unmarshal().json(JsonLibrary.Jackson)
.split(jsonpath("$"))
.filter(jsonpath("$[?(@.id == ${property.idEntidade})]"))
.marshal().json(JsonLibrary.Jackson)
.log("${body}");
}
}
我从浏览器调用它,使用 URL: http://localhost:8080/camel/entidade/1 。
在文件夹files/mock/dados
中,我有一个文件,称为entidades.json
JSON 数组(见下文)。
我知道拆分和过滤器正在工作,因为我在最后一行代码中记录了正文,这就是日志中显示的内容:
2021-04-28 18:15:15.707 INFO 3905542 --- [nio-8080-exec-1] search-by-id : {"id":"1","tipo":"PF","nome" :"若昂玛丽亚"}
但这是返回给浏览器的内容(entidades.json
文件的确切内容):
[{"id":"1","tipo":"PF","nome":"João Maria"},{"id":"2","tipo":"PF","nome":" Maria João"},{"id":"3","tipo":"PF","nome":"João Silva"},{"id":"4","tipo":"PF","名称":"何塞·索萨"}]
为什么记录的正文与浏览器中显示的不同并修复它?
PS:如果我删除那些 marshal 和 unmarshal 调用,我会在浏览器中收到以下错误:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:没有为类 org.apache.camel.component.file.FileBinding 找到序列化程序,也没有发现用于创建 BeanSerializer 的属性(为避免异常,请禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链: org.apache.camel.component.file.GenericFile["binding"])
解决方案
推荐阅读
- php - Laravel 5 无法在 foreach 循环中生成 where 条件
- typo3 - 如何更新以字符串形式存储在 extbase 中的图像?
- c# - 解析器错误消息:无法在 Default.aspx 中加载类型
- c# - UIImageView 未在 Xamarin 上显示图像
- r - R:使用 lapply 时遇到问题
- git - 如何查看提交之间已删除的更改
- javascript - 发送消息请求
- android - 工作线程提前结束
- java - SpringBoot 2.0 - FileSizeLimitExceededException 即使设置了正确的参数
- ruby-on-rails - 无法为 ActiveModel 属性赋值(rails 4.2)