有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java HTTP GET调用REST Web服务,并使用Camel中的查询字符串

我需要使用查询字符串对REST WS进行GET调用,uri必须如下所示:

http://somehost.com/someservice?parm1=value

我需要分配主体的参数“parm1”的值(一个带有getter和setter的普通pojo),所以这是驼峰路线:

<setHeader headerName = "Exchange.HTTP_QUERY" id = "queryStringSomeService">
    <simple>parm1=${body.someField}</simple>
</setHeader>
<setHeader headerName = "CamelHttpMethod" id = "httpMethodSomeService">
    <constant>GET</constant>
</setHeader>
<to id="SOME_SERVICE" uri="http4:/somehost.com/someservice?bridgeEndpoint=true" />

问题是,从未将查询字符串添加到uri中,http方法最终使用了它的POST,尽管我添加了头以显式设置GET

我已经开始使用Spring DSL了

在文档的第http://camel.apache.org/http4.html页中,建立了选择HTTP方法的规则;在“使用GET或POST调用”部分中,但显然在本例中没有应用它们

更新:

将body设置为null可以解决将HTTP方法更改为GET的问题,尽管文档中说可以使用CamelHttpMethod头覆盖该方法

但是对于查询字符串,我尝试了所有的变体;交换。HTTP_URI和Exchange。HTTP_查询,所有这些都不起作用

以下是WS调用之前的exchange标头:

Accept: application/json
CamelHttpCharacterEncoding: ISO-8859-1
CamelHttpMethod: GET
CamelHttpQuery: ?parm1=value
CamelHttpResponseCode: 200
CamelHttpResponseText: OK
CamelHttpUri: /someservice
CamelHttpUrl: http://somehost/someservice
CamelRedelivered: false
CamelRedeliveryCounter: 0
Connection: close
Content-Type: application/json;charset=UTF-8
Date: Fri, 14 Sep 2018 16:08:19 GMT
Last-Modified: Thu, 13 Sep 2018 13:33:30 GMT
Set-Cookie: JSESSIONID=YXQkEAUAjh0yWsu4UYwSG8vE.5aa71417-9e93-3be1-99ca-7b4ec1d6f2a0; Path=/ca_tar_tarjeta
Transfer-Encoding: chunked
breadcrumbId: ID-wildfly01-1536931422750-9-23

共 (1) 个答案

  1. # 1 楼答案

    保重。在Camel路由中,Camel消息正文通常成为传出消息的正文。这可能就是Camel使用POST的原因:您的HTTP请求有一个主体。在发送HTTP请求之前,请尝试将Camel消息正文设置为null

    不确定这是否正确,我总是使用Java路由:

    <setBody>
        <simple>${bodyAs(null)}</simple>
    </setBody>
    

    但是,我不知道为什么查询字符串不起作用