【发布时间】:2021-04-28 21:20:09
【问题描述】:
我已经声明了一个 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 ","nome":"何塞·索萨"}]
为什么记录的正文与浏览器中显示的不同并修复它?
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"])
【问题讨论】:
-
您在浏览器中使用的 URL 路径 是什么?您是否像
GET /entidade/2中一样指定了{id}? -
@hc_dev 是的,我做到了。我已经更新了问题以澄清。
标签: java spring-boot jackson apache-camel