【问题标题】:Jersey client calling RESTful serviceJersey 客户端调用 RESTful 服务
【发布时间】:2013-08-22 03:28:19
【问题描述】:

我刚开始使用 Jersey,我正在努力让我的客户使用现有的 RESTful 服务。我有一个有效的 SOAPUI 调用,这是来自该请求的原始数据。

POST http://localhost/QWJB/WENXrest//getHistory HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json
User-Agent: Jakarta Commons-HttpClient/3.1
Content-Length: 189
Authorization: Basic VUNRRzE02fr45tDE0d1RQdw==
Host: localhost

{getHistory:       
{
wENXHeader:
{
languageCode: "en"
},

Account: "111111111",

    services: 
    [
        {Service: "CE000001"},
        {Service: "CE000002"}
    ]
    }

}

在这一点上,我愿意硬编码所有的值,只是为了让它工作。但这是我的客户端代码。

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.core.MediaType;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;

public void MakeRestCall() {
  try {
GetHistory requestData = new GetHistory();
requestData.setAccount("111111111");

Client client = Client.create();
WebResource webResource = client
.resource("http://localhost/QWJB/WNEXrest//getHistory");

webResource.accept("application/json");
webResource.entity(requestData);

GetHistoryResponse response =       
webResource.type(MediaType.APPLICATION_XML).post(GetHistoryResponse.class);

} catch (Exception e) {
logger.error(message);
    e.printStackTrace();
}

当我使用 SOAPUI 时,我必须设置用户 ID 和密码,这是原始请求的授权部分中的内容吗?我应该用什么来加密它?

【问题讨论】:

  • Juned 的回答帮助我解决了这个问题。我还必须将所有 webresource 调用放在同一行上,我这样做的方式只是在我的标题 webResource.type(MediaType.APPLICATION_XML).post(GetHistoryResponse.class) 中设置最后一行

标签: java rest authentication jersey client


【解决方案1】:

框架认证标头

由于您的 REST 服务使用 Basic 身份验证,因此您可以使用以下方式设置 jersey rest 客户端身份验证:

client.addFilter(new HTTPBasicAuthFilter(username, password));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2012-07-24
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    相关资源
    最近更新 更多