WebClient - Jira rest api,意外结果

时间:2016-05-25 06:13:40

标签: java rest curl cxf jira

我正试图通过Jira Rest Api从JIRA中获取问题。当我使用curl时没问题,我得到了我想要的问题。问题是我想通过Java代码(我使用maven更改插件,进行一些小的修改)来做到这一点,但插件没有找到问题。我得到200状态响应,但响应不包含任何问题。

以下是Java代码的片段(身份验证在设置中完成):

    WebClient client = setupWebClient(jiraUrl);
    doSessionAuth(client);
    client.replacePath("/rest/api/2/search");
    client.type(MediaType.APPLICATION_JSON_TYPE);
    client.accept(MediaType.APPLICATION_JSON_TYPE);
    client.query("key", "<Issue-key>");
    Response res = client.get(); 

这给了我一个200响应这个JSON:

{"startAt":0,"maxResults":50,"total":0,"issues":[]}

这是我的卷曲请求,它给了我预期的结果:

curl -u user:password -X GET -H "Content-Type:application/json" https://bankid.atlassian.net/rest/api/2/search?key=<Issue-key>&maxResults=10

我也尝试过使用POST和JSON查询:

WebClient client = setupWebClient(jiraUrl);
doSessionAuth(client);

String jqlQuery = new    JqlQueryBuilder(log).urlEncode(false).filter(filter).build();

StringWriter searchParamStringWriter = new StringWriter()
JsonGenerator gen = jsonFactory.createGenerator(searchParamStringWriter);
gen.writeStartObject();
gen.writeStringField("jql", jqlQuery);
gen.writeNumberField("maxResults", nbEntriesMax);
gen.writeArrayFieldStart("fields");
gen.writeString("*all");
gen.writeEndArray();
gen.writeEndObject();
gen.close();
client.replacePath("/rest/api/2/search");
client.type(MediaType.APPLICATION_JSON_TYPE);
client.accept(MediaType.APPLICATION_JSON_TYPE);
log.debug("JQL query [" + searchParamStringWriter.toString() + "]");
Response searchResponse = client.post(searchParamStringWriter.toString());

这里也一样。相应的curl给了我预期的结果(一个问题),但这会返回200响应但没有问题。

我似乎无法找出问题所在。有什么指针吗?此外,是否可以确切地查看客户端发送请求的路径(以确保我的设置没有任何问题)?我已经阅读了API但没有找到任何内容。

1 个答案:

答案 0 :(得分:1)

您使用Apache CXF发送REST呼叫吗?

一般情况下,如果您发现手动尝试的内容与代码执行的内容之间存在差异,则启用日志记录会有所帮助,因此您可以比较代码是否真的执行相同的操作(可能不是)。

对于Apache CXF,如下所述:

即使这对您没有立即帮助,将这些日志添加到您的问题中也很有用,以便其他人更容易发现问题。