簡體   English   中英

使用RESTeasy消耗的JSON正文POST - HTTP 100

[英]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.

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