[英]Working HTTP query in Postman not working in Spring Boot Apache Camel 3.1
我是 Apache Camel 的新手,我正在努力解決這個問題。 我想復制一個在 Postman 中工作的簡單查詢:
https://{{baseurl}}/v3/company/{{companyid}}/query?query=SELECT id, Metadata.LastUpdatedTime FROM Payment WHERE Metadata.LastUpdatedTime>='2018-01-01' ORDERBY Metadata.LastUpdatedTime, Id STARTPOSITION 1 MAXRESULTS 10 &minorversion=47
GET 請求包括以下標頭:
Accept: application/json
Authorization: Bearer {very long auth token}
其中{very long auth token}
是實踐中的實際值。 我嘗試用 Apache Camel 復制這個:
from("timer:foo?repeatCount=1")
.setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.GET))
.setHeader(Exchange.HTTP_PATH, constant("v3/company/{companyid}/query"))
.setHeader(Exchange.HTTP_QUERY, constant("query=SELECT id, Metadata.LastUpdatedTime FROM Payment WHERE Metadata.LastUpdatedTime>='2018-01-01' " +
"ORDERBY Metadata.LastUpdatedTime, Id STARTPOSITION 1 MAXRESULTS 10 &minorversion=47"))
.setHeader("Accept", constant("application/json"))
.setHeader("Authorization", constant("Bearer {very long auth code}"))
.to("log://PoCMainApp?showBody=true&showBodyType=true&showHeaders=true&showProperties=true")
.to("http://quickbooks.api.intuit.com")
;
其中{companyid}
和{very long auth token}
是實踐中的實際值。 在運行時,查詢掛起並最終超時。 將查詢粘貼到瀏覽器中時也會發生同樣的情況,瀏覽器顯然不提供Accept
和Authorization
標頭。
這讓我認為 Camel 構建的整體有效載荷可能存在問題。
日志showHeaders=true
僅顯示與代碼中相同的值 - 它不顯示請求中實際發送的內容。 我試圖對 sysout 進行更多調試,但沒有取得太大成功。 這是一個 Spring Boot 項目,因此log4j.properties
被忽略(至少在我的設置中)。 相反,我已將 log4j 設置轉換為application.properties
,如下所示:
camel.springboot.tracing = true
# https://springframework.guru/using-logback-spring-boot
logging.level.httpclient.wire.header=TRACE
logging.level.org.apache.camel.component.http=TRACE
logging.level.org.apache.camel.http.common=TRACE
logging.level.org.apache.camel.http=TRACE
logging.level.org.apache.commons.httpclient=TRACE
這是我在 sysout 中得到的所有信息:
INFO 51071 --- [1 - timer://foo] PoCMainApp : Exchange[ExchangePattern: InOnly
Properties: {
CamelTimerCounter=1
CamelTimerFiredTime=Mon Mar 30 16:49:28 BST 2020
CamelTimerName=foo
CamelTimerPeriod=1000
CamelToEndpoint=log://PoCMainApp?showBody=true&showBodyType=true&showHeaders=true&showProperties=true
}
Headers: {
Accept=application/json
Authorization=Bearer {very long auth token}
CamelHttpMethod=GET
CamelHttpPath=v3/company/193514690594249/query
CamelHttpQuery=query=SELECT id
Metadata.LastUpdatedTime FROM Payment WHERE Metadata.LastUpdatedTime>='2018-01-01' ORDERBY Metadata.LastUpdatedTime, Id STARTPOSITION 1 MAXRESULTS 10 &minorversion=47
firedTime=Mon Mar 30 16:49:28 BST 2020}
BodyType: null
Body: [Body is null]]
INFO 51071 --- [1 - timer://foo] org.apache.camel.Tracing : [route1 ] [http://quickbooks.api.intuit.com ] Exchange[Id: ID-ub18dm-1585583368149-0-1, BodyType: null, Body: [Body is null]]
TRACE 51071 --- [1 - timer://foo] o.a.camel.component.http.HttpProducer : Using URL: http://quickbooks.api.intuit.com/v3/company/193514690594249/query?query=SELECT%20id,%20Metadata.LastUpdatedTime%20FROM%20Payment%20WHERE%20Metadata.LastUpdatedTime%3E='2018-01-01'%20ORDERBY%20Metadata.LastUpdatedTime,%20Id%20STARTPOSITION%201%20MAXRESULTS%2010%20&minorversion=47 with method: GET http://quickbooks.api.intuit.com/v3/company/193514690594249/query?query=SELECT%20id,%20Metadata.LastUpdatedTime%20FROM%20Payment%20WHERE%20Metadata.LastUpdatedTime%3E='2018-01-01'%20ORDERBY%20Metadata.LastUpdatedTime,%20Id%20STARTPOSITION%201%20MAXRESULTS%2010%20&minorversion=47 HTTP/1.1
DEBUG 51071 --- [1 - timer://foo] o.a.camel.component.http.HttpProducer : Executing http GET method: http://quickbooks.api.intuit.com/v3/company/193514690594249/query?query=SELECT%20id,%20Metadata.LastUpdatedTime%20FROM%20Payment%20WHERE%20Metadata.LastUpdatedTime%3E='2018-01-01'%20ORDERBY%20Metadata.LastUpdatedTime,%20Id%20STARTPOSITION%201%20MAXRESULTS%2010%20&minorversion=47
這一直讓我發瘋,所以我會很感激任何幫助。
提前致謝,-suitej
正如亞當在上面指出的那樣,Intuit 只接受 HTTPS。
解決辦法是:
.to("https://quickbooks.api.intuit.com")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.