在Jersey REST Client中设置内容类型/编码

时间:2013-07-09 06:15:23

标签: post jersey contenttype

我一直在尝试使用jersey REST Client调用REST POST API。 API是docs 网址: 方法:POST 标题信息: - X-GWS-APP-NAME:XYZ 接受:application / json或application / xml

我的样本泽西客户端代码是

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);

自从过去1周以来,我一直在尝试此代码变体,但它无效。在这方面的任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分: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 {
...
...
}