我使用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类型。
有什么想法吗?