如何为进出查询指定不同的bindingMode?

时间:2017-01-19 10:11:37

标签: java json rest apache-camel marshalling

我使用camel-swagger并编写REST Api。

@Override
public void configure() throws Exception {
    // configure we want to use servlet as the component for the rest DSL
    // and we enable json binding mode
    restConfiguration().component("netty4-http")
            // use json binding mode so Camel automatic binds json <--> pojo
            .bindingMode(RestBindingMode.auto)
            // and output using pretty print
            .dataFormatProperty("prettyPrint", "true")
            .dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES")
            // setup context path on localhost and port number that netty will use
            .port("{{env:HTTP_PORT:8080}}")
            // add swagger api-doc out of the box
            .apiContextPath("/swagger.json")
            .apiProperty("api.title", "HtmlCleaner")
            .apiProperty("api.version", "1.0")
            .apiProperty("api.description", "HtmlCleaner")
            // and enable CORS
            .apiProperty("cors", "true")
            .enableCORS(true);


    rest("/htmlcleaner").description("HtmlCleaner")
            .consumes("text/plain").produces("application/json")


    .post().description("Extract text content from HTML").type(String.class)
            .to("bean:HtmlCleaner?method=getTextFromHtml").outType(TextDocument.class);
}

我遇到了bindingMode的问题,因为输入类型只是一个字符串,输出类型是一个POJO,应该编组为json。

如果我将bindingMode设置为关闭,则输入​​正常(text / plain以字符串形式接收)但显然我的POJO在返回响应时没有编组到json。

如果将bindingMode设置为json,则输入查询转换会抛出异常。

在camel-restdsl文档中:

  

从Camel 2.16.3开始,只有当内容类型标题包含代表性的单词json或xml&gt;时才会发生从POJO到JSon / JAXB的绑定。如果&gt;邮件正文不应尝试使用绑定进行编组,则允许您指定自定义内容类型。对于&gt;示例,如果消息正文是自定义二进制有效负载等。

不幸的是,即使发送内容类型为text / plain,该组件仍然试图编组。 (我使用骆驼2.18.0)

编辑:实际上,我确实误读了文档,这个功能正在输出(POJO-&gt; JSON),我的问题是我想停用编组输入...

我尝试添加路由以将我的POJO转换为json,然后将响应返回给用户,但我收到的是NettyStream主体而不是我的POJO类型。

有什么想法吗?

0 个答案:

没有答案