2013-07-09 38 views
5

HI我一直在尝试使用泽西REST客户端调用REST POST API。该API文档是 网址: 方法:POST 头信息: - X-GWS-APP-NAME:XYZ 接受:应用/ JSON或应用程序/ XML在Jersey REST客户端中设置内容类型/编码

我的样本Jersey客户端代码

Client client = Client.create(); 

WebResource resource=client.resource(URL); 

resource.accept(javax.ws.rs.core.MediaType.APPLICATION_XML); 
resource.type(javax.ws.rs.core.MediaType.APPLICATION_XML); 
resource.type("charset=utf-8"); 
ClientResponse response = resource.post(ClientResponse.class,myReqObj); 

我一直在尝试此代码变种自上一周以来,它不工作。任何在这方面的帮助,高度赞赏。

回答

7

棘手的部分是WebResource方法遵循Builder设计模式,因此它返回一个Builder对象,当您调用其他方法来设置请求的完整上下文时,需要保留并继续。

当您执行resource.accept时,它会返回一些您不存储的内容,因此在执行resource.type时它会丢失,因此只有最后一次调用才会生效。

您通常会将所有标准设置为一行,但您也可以将输出保存在本地变量中。

ClientResponse response = client.resource(URL) 
           .accept(MediaType.APPLICATION_XML) 
           .type(MediaType.APPLICATION_XML) 
           .post(ClientResponse.class,myReqObj); 
+2

我认为你需要从接受和型线的末端卸下分号。 – FrontierPsycho

+0

滥用复制/粘贴。 :)它现在已经修复了。谢谢! – TheArchitect

+0

不客气,谢谢。:) – FrontierPsycho

1

我喜欢那样。

Response response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) 
    .accept(MediaType.APPLICATION_JSON_TYPE) 
    .post(Entity.entity(a, "application/json; charset=UTF-8")); 

在这里,“A”是账户类的实例,类似的

@XmlRootElement 
public class account { 
... 
... 
} 
+0

这是泽西岛2吗?看起来......不寻常,也许你可以稍微扩大答案? – Nenotlep