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

0kjbasz6  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(163)

我尝试将消息从REST API发送到新路由,即使我在REST API上接收到JSON格式的请求,并且绑定设置为JSON,当我将其转发到新路由时,它将显示为InputStream,我必须将其封送为JSON才能使用它。
我已经试过在RestConfiguration中使用streamCaching和其他组件(消费、生产、类型、数据类型)。

  1. public void configure() {
  2. restConfiguration().component("servlet")
  3. .bindingMode(RestBindingMode.json)
  4. .skipBindingOnErrorCode(false);
  5. rest("/resttest")
  6. .patch("/t1")
  7. .id("t1")
  8. .description("t1")
  9. .consumes("application/json")
  10. .produces("application/json")
  11. .param()
  12. .name("body")
  13. .type(RestParamType.body)
  14. .dataType("json")
  15. .required(true)
  16. .endParam()
  17. .to("direct:test2");

此路由在其他类中:

  1. from("direct:test2").id("test2")
  2. .marshal().json(JsonLibrary.Jackson,SomePOJO.class)
  3. .unmarshal().json(JsonLibrary.Jackson, SomePOJO.class)
  4. .choice()
  5. .when(simple("${body.getStatus()} =~ 'Closed'"))
  6. .....

我希望在test2路由上得到JSON消息,但不知何故我得到了InputStream,所以我必须首先进行封送处理。有人知道我如何让REST API转发我以JSON格式路由消息,而不是作为流吗?

of1yzvn4

of1yzvn41#

请尝试:

  1. .convertBodyTo(String.class)

在你解组之前

ny6fqffe

ny6fqffe2#

我遇到了同样的问题,我必须对传入的值应用编组方法,对响应应用解组方法。
这是 Postman 的回答:

我用的是这个代码:

  1. rest(service.service)
  2. .description(ContentCategory.api("Service Test"))
  3. .post("/product/{productType}/{enterpriseId}")
  4. .description("service for saving a product")
  5. .consumes(MediaType.APPLICATION_JSON)
  6. .type(Product.class)
  7. .bindingMode(RestBindingMode.json)
  8. .produces(MediaType.APPLICATION_JSON)
  9. .outType(String.class)
  10. .route()
  11. .bean("productService", "saveProduct")
  12. .marshal()
  13. .json(JsonLibrary.Jackson)
  14. .setHeader(Exchange.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON))
  15. .endRest();

我只是在意识到接收到InputStream之后添加了unmarshall方法

  1. rest(service.service)
  2. .description(ContentCategory.api("Service Test"))
  3. .post("/product/{productType}/{enterpriseId}")
  4. .description("service for saving a product")
  5. .consumes(MediaType.APPLICATION_JSON)
  6. .type(Product.class)
  7. .bindingMode(RestBindingMode.json)
  8. .produces(MediaType.APPLICATION_JSON)
  9. .outType(String.class)
  10. .route()
  11. .bean("productService", "saveProduct")
  12. .marshal()
  13. .json(JsonLibrary.Jackson)
  14. .unmarshal()
  15. .json(JsonLibrary.Jackson)
  16. .setHeader(Exchange.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON))
  17. .endRest();

其实我只是加了这两行

  1. .unmarshal()
  2. .json(JsonLibrary.Jackson)

它开始工作:

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

展开查看全部

相关问题