[英]POST with JSON body consumed by RESTeasy - HTTP 100
我有一個非常簡單的場景,我無法開展工作。 我正在嘗試使用cURL將JSON字符串POST到RESTful端點,以通過HTTPS和RESTeasy在服務器上發送請求。
我的cURL POST配置如此:
$ch = curl_init();
$content = json_encode($validJsonString);
curl_setopt($ch, CURLOPT_URL, 'https://foobar.com/test?trackingId=12345');
curl_setopt($ch, CURLOPT_POSTFIELDS, array('json' => $content));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$headers = array(
'Content-Type: application/json',
'Content-Length: ' . strlen($content)
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec ($ch);
$httpResponseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$json = json_decode($response);
curl_close ($ch);
return $json;
RESTeasy收件人看起來像:
@POST
@Path("/test")
@Produces("application/json")
public String addObjectCommentAsJSON( @FormParam("json") String validJsonString,
@QueryParam("trackingId") String trackingId) {
Gson gson = new Gson();
SomeObject someObject = gson.fromJson(validJsonString, SomeObject.class);
String responseString = methodThatReturnsAJsonString(trackingId, someObject);
return responseString;
}
我遇到的這個問題是請求掛起大約30秒然后返回HTTP 100響應。 我知道HTTP 100意味着繼續請求的其余部分,但我不明白我應該怎么做。
我試圖刪除Content-Length標題,但顯然我得到411(需要內容長度),所以這也不是一個選項。
這可能是內容類型的問題嗎? 任何幫助深表感謝。
好的,感謝@cbuckley和@ abraham在評論中的建議,我已經能夠解決這些問題。 這就是我需要做的事情:
1->更改POST主體的內容,而不是curl_setopt($ch, CURLOPT_POSTFIELDS, array('json' => $content));
我現在有curl_setopt($ch, CURLOPT_POSTFIELDS,json_encode($validJsonString));
2->我創建了一個自定義的@Provider
,它將JSON字符串解析為具有相同結構的Java POJO:
@Provider public class SomeObjectProvider implements StringConverter<SomeObject> { private final Gson gson = new Gson(); public SomeObject fromString(String s) { return gson.fromJson(s, SomeObject.class); } public String toString(SomeObject someObject) { return gson.toJson(SomeObject); } }
3->最后,收件人方法的結構必須略有改變:
@POST @Path("/test") @Produces("application/json") public String addObjectCommentAsJSON(SomeObject someObject, @QueryParam("trackingId") String trackingId) { String responseString = methodThatReturnsAJsonString(trackingId, someObject); return responseString; }
這一切都很順利。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.