Java Apache camel如何在“中提交正文”;正文“;总体安排

Java Apache camel如何在“中提交正文”;正文“;总体安排,java,rest,http,apache-camel,Java,Rest,Http,Apache Camel,使用apachecamel,我有了Rest组件。它看起来像: <post uri="/body" method="POST"> <description>Here is post method</description> <param name="save" type="body" dataType="string"/> <route> <proces

使用apachecamel,我有了Rest组件。它看起来像:

    <post uri="/body" method="POST">
        <description>Here is post method</description>
        <param name="save" type="body" dataType="string"/>
        <route>
            <process ref="postRedirectProcessor" />
            <to uri="direct:commonRoute" />
        </route>
    </post>
(我可以看到它进入后重定向处理器,这很好)。但这不是我想要的。我希望它能处理如下请求:

curl -i --data "b=hereisbody" http://localhost:8080/body (works fine, but I don't need it)
curl -i --data "hereisbody" http://localhost:8080/body (doesn't work, causes 405)
我的意思是,“数据”的格式是而不是k=v&k2=v2,但它只是字符串,就像在示例中一样(比如——数据“某物”

它会导致异常,不会进入后重定向处理器

2020-04-10 18:43:09,716 ERROR [http-nio-8080-exec-6] - ,,, - Servlet.service() for servlet [CamelServlet] in context with path [] threw exception
java.lang.IllegalArgumentException: Invalid parameter, expected to be a pair but was hereisbody
    at org.apache.camel.http.common.DefaultHttpBinding.readFormUrlEncodedBody(DefaultHttpBinding.java:272) ~[camel-http-common-2.24.3.jar:2.24.3]
    at org.apache.camel.http.common.DefaultHttpBinding.readRequest(DefaultHttpBinding.java:116) ~[camel-http-common-2.24.3.jar:2.24.3]
    at org.apache.camel.http.common.HttpMessage.<init>(HttpMessage.java:56) ~[camel-http-common-2.24.3.jar:2.24.3]
    at org.apache.camel.http.common.CamelServlet.doService(CamelServlet.java:187) ~[camel-http-common-2.24.3.jar:2.24.3]
    at org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:79) ~[camel-http-common-2.24.3.jar:2.24.3]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.31.jar:9.0.31]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.31.jar:9.0.31]
2020-04-10 18:43:09716路径为[]的上下文中Servlet[CamelServlet]的错误[http-nio-8080-exec-6]-,-Servlet.service()引发异常
java.lang.IllegalArgumentException:参数无效,应为一对,但为hereisbody
在org.apache.camel.http.common.DefaultHttpBinding.readFormUrlEncodedBody(DefaultHttpBinding.java:272)~[camel-http-common-2.24.3.jar:2.24.3]
在org.apache.camel.http.common.DefaultHttpBinding.readRequest(DefaultHttpBinding.java:116)~[camel-http-common-2.24.3.jar:2.24.3]
在org.apache.camel.http.common.HttpMessage.(HttpMessage.java:56)~[camel-http-common-2.24.3.jar:2.24.3]
在org.apache.camel.http.common.CamelServlet.doService(CamelServlet.java:187)~[camel-http-common-2.24.3.jar:2.24.3]
在org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:79)~[camel-http-common-2.24.3.jar:2.24.3]
在javax.servlet.http.HttpServlet.service(HttpServlet.java:741)~[tomcat-embed-core-9.0.31.jar:9.0.31]
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)~[tomcat-embed-core-9.0.31.jar:9.0.31]
我想,param type=“body”就像在xml posted中一样,可以做到这一点,但运气不好。

Curl在
--data
中发送数据,默认情况下带有
内容类型:application/x-www-form-urlcoded
标题。看

x-www-form-urlencoded
必须为键/值格式()。这就是引发异常的原因

名称与值之间用
=
分隔,名称/值对之间用
&
分隔

要发送原始数据,您需要指定另一种
内容类型

curl -v -i -H "Content-Type: text/plain" --data "hereisbody" http://localhost:8080/body

这是正确的。但如果我不能更改输入请求,该怎么办?有没有办法处理它们?我的意思是,禁用输入验证或其他什么…最终意识到我可以更改格式,所以-H“Content-Type:text/plain”很好)