Php RESTeasy-HTTP100使用JSON正文发布

Php RESTeasy-HTTP100使用JSON正文发布,php,rest,post,curl,resteasy,Php,Rest,Post,Curl,Resteasy,我有一个非常简单的场景,我无法开始工作。我试图使用cURL在服务器上通过HTTPS和RESTeasy向restfulendoint发送一个JSON字符串 我的卷曲柱配置如下: $ch = curl_init(); $content = json_encode($validJsonString); curl_setopt($ch, CURLOPT_URL, 'https://foobar.com/test?trackingId=12345'); curl_setopt($ch, CURLOPT

我有一个非常简单的场景,我无法开始工作。我试图使用cURL在服务器上通过HTTPS和RESTeasy向restfulendoint发送一个JSON字符串

我的卷曲柱配置如下:

$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 recipiant看起来像:

@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意味着继续处理请求的其余部分,但我不明白我应该如何做

我试图删除内容长度标题,但显然我得到了411(需要内容长度),所以这也不是一个选项


这可能是内容类型的问题吗?非常感谢您的帮助。

好的,感谢@cbuckley和@abraham在他们的评论中提出的建议,我能够解决这些问题。这就是我需要做的:

1->更改帖子正文的内容,而不是
curl\u setopt($ch,CURLOPT\u POSTFIELDS,array('json'=>$content))我现在有
curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($validJsonString))

2->我创建了一个自定义的
@Provider
,它将JSON字符串解析为具有相同结构的Java POJO:


这一切都很顺利。

根据php.net,如果将数组传递给
CURLOPT\u POSTFIELDS
它将为
多部分/表单数据进行编码,则可能会重复。如果直接传递json字符串会发生什么?@cbuckley我看到了,但在另一个上没有提到RESTeasy,这是这里潜在问题的50%。@abraham我不知道。。。我会试试看。关于这个问题,请参考亚伯拉罕的评论。如果内容类型为application/json,则应该为CURLOPT_POSTFIELDS提供一个包含json_encode输出的字符串。
@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);
    } 
}
@POST
@Path("/test")
@Produces("application/json")
public String addObjectCommentAsJSON(SomeObject someObject,
                                     @QueryParam("trackingId") String trackingId) {
    String responseString = methodThatReturnsAJsonString(trackingId, someObject);
    return responseString;
}