簡體   English   中英

Apache駱駝如何以“body”格式提交body

[英]Apache camel how to submit body in “body” format

使用 Apache 駱駝,我有 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)

(我可以看到它進入postRedirectProcessor ,這很好)。 但這不是我想要的。 我希望它處理這樣的請求:

curl -i --data "hereisbody" http://localhost:8080/body (doesn't work, causes 405)

我的意思是,“數據”的格式不像k=v&k2=v2 ,而只是字符串,就像示例中一樣(例如--data "something" )。

它會導致異常,它不會 go 進入 postRedirectProcessor。

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]

我想,在 xml 中發布的param type="body"可以解決問題,但沒有運氣。

Curl 默認在--data中使用Content-Type: application/x-www-form-urlencoded header 發送數據。 請參閱如何使用 curl 發布原始身體數據?

x-www-form-urlencoded必須是鍵/值格式(規范)。 這就是為什么拋出異常的原因。

名稱由=與值分隔,名稱/值對由&分隔。

要發送原始數據,您需要指定另一個Content-Type

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM