Php RESTeasy-HTTP100使用JSON正文发布
我有一个非常简单的场景,我无法开始工作。我试图使用cURL在服务器上通过HTTPS和RESTeasy向restfulendoint发送一个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
$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;
}