当前位置: 首页 > 知识库问答 >
问题:

JSON的Camel绑定模式不起作用,无法将其解组到POJO

万阳嘉
2023-03-14

我正在尝试将消息从 rest API 发送到新路由,即使您在我的 REST API 上收到 JSON 格式的请求并且绑定设置为 JSON,当我将其转发到新路由时,它将显示为 InputStream,我必须将其编组到 JSON 才能使用它。

我已经尝试在RestConfiguration中使用streamCaching和其他组件(consumes、produces、type、dataType)。我还使用了POM中的所有依赖项。

public void configure() {
    restConfiguration().component("servlet")
            .bindingMode(RestBindingMode.json)
            .skipBindingOnErrorCode(false);

    rest("/resttest")
       .patch("/t1")
            .id("t1")
            .description("t1")
            .consumes("application/json")
            .produces("application/json")
            .param()
                .name("body")
               .type(RestParamType.body)
               .dataType("json")
                .required(true)
            .endParam()
            .to("direct:test2");

这条路线在其他班级:

 from("direct:test2").id("test2")

            .marshal().json(JsonLibrary.Jackson,SomePOJO.class)
            .unmarshal().json(JsonLibrary.Jackson, SomePOJO.class)
            .choice()
            .when(simple("${body.getStatus()} =~ 'Closed'"))
            .....

我希望在test2路由上得到JSON消息,但不知何故我得到了InpuStream,所以我必须先做编组。有人知道如何让REST API将我转发到JSON格式的路由消息,而不是流吗?

共有2个答案

栾耀
2023-03-14

我也遇到了同样的问题,我必须对传入的值应用marshal方法,对响应应用unmarshal方法。

我用的是这个代码:

rest(service.service)
.description(ContentCategory.api("Service Test"))           
.post("/product/{productType}/{enterpriseId}")
.description("service for saving a product")
.consumes(MediaType.APPLICATION_JSON)
.type(Product.class)
.bindingMode(RestBindingMode.json)
.produces(MediaType.APPLICATION_JSON)
.outType(String.class)
.route()
.bean("productService", "saveProduct")
.marshal()
.json(JsonLibrary.Jackson)
.setHeader(Exchange.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON))
.endRest();

我只是在意识到我收到了一个输入流后添加了unmar的方法

rest(service.service)
.description(ContentCategory.api("Service Test"))           
.post("/product/{productType}/{enterpriseId}")
.description("service for saving a product")
.consumes(MediaType.APPLICATION_JSON)
.type(Product.class)
.bindingMode(RestBindingMode.json)
.produces(MediaType.APPLICATION_JSON)
.outType(String.class)
.route()
.bean("productService", "saveProduct")
.marshal()
.json(JsonLibrary.Jackson)
.unmarshal()
.json(JsonLibrary.Jackson)
.setHeader(Exchange.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON))
.endRest();

事实上,我只是加了两行

.unmarshal()
.json(JsonLibrary.Jackson)

它认为您可能需要对restest服务使用解组方法。

容寒
2023-03-14

尝试:

.convertBodyTo(String.class)

在你解组之前。

 类似资料:
  • 我有一个ASP. NET核心Web API。 一个endpoint,它接受一个名为搜索的模型。它有一个名为表达式类型查询的属性。这个表达式对象有子类。 我将以下JSON发布到我的endpoint(应用程序的内容类型/JSON) {"查询":{"字段ID":"主体","值":"蛋糕","运算符":"匹配"}} 首先,查询参数只是基本表达式——一个多态性问题! 所以我以为是定制的模型活页夹。 我可以针

  • 问题内容: 我有一项通过REST为我提供属性的服务。现在,我想将身体解组为属性结构。请查看此操场示例:单击。当我只有一个财产时,可以轻松将其编组为。但是,服务器发出的ACTUAL响应有所不同。我要解组的实际响应是这样的: 不幸的是,我不知道如何解组。有人可以指出正确的方向吗? 问题答案: 您需要解组一片属性:http : //play.golang.org/p/eRgjfBHypH

  • 问题内容: 我想将以下JSON解组到结构中: 我试图以各种方式修改,但是结构始终为空: 输出: 过去使用的JSON没有括号,因此我怀疑问题与它们有关。 有人可以帮忙吗? https://play.golang.org/p/pymKbOqcM- 问题答案: 发生这种情况是因为其他包()无法访问私有字段(即使具有反射)。在私有语言中,私有字段是以小写字母开头的字段。要解决此问题,请使您的结构包含公共字

  • 问题内容: 我认为我在这里缺少一些简单(重要)的东西。我正在使用一个包含的模板,该模板包含映射到某个值的输入: 控制器: 警报$ scope.testvalue的值始终显示初始值,而不显示更新后的值(当您输入输入内容时)。帮我欧比旺。您是我们唯一的希望。 小提琴:http://jsfiddle.net/h5aac/ 问题答案: 绑定到原语而不是对象太普遍了。字符串的值被传递,而不是对对象的引用。如

  • 我面临的问题,以开发一个演示JavaFX程序的图像查看作为一个新手。这里,我在BorderPane中心位置有一个ImageView,它用StackPane和VBox包装。其中StackPane总是与VBox一起增长,我将ImageView与StackPane Width和Height属性绑定在一起,这样当我调整窗口大小时,ImageView就会改变它的设置亮度和重量。它的工作很好,我想,但问题是,

  • 我想定义如下。oneOf是否支持swagger.yaml? 将只有id,而其中将没有,而是所有其他详细信息,例如、、等。