首页 > 解决方案 > 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.jsonJSON 数组(见下文)。

我知道拆分和过滤器正在工作,因为我在最后一行代码中记录了正文,这就是日志中显示的内容:

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"])

标签: javaspring-bootjacksonapache-camel

解决方案



推荐阅读