WebClient - Jira rest api,结果意外
WebClient - Jira rest api, with unexpected result
我正在尝试通过 Jira Rest Api 从 JIRA 获取问题。当我使用 curl 时没问题,而且我得到了我想要的问题。问题是我想通过 Java 代码(我使用 maven changes 插件,做了一些小的修改)来做到这一点,但是插件没有发现问题。我收到 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 请求,它给了我预期的结果:
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 给了我预期的结果(一个问题),但是这个 returns 一个 200 响应但没有问题。
我似乎无法找出问题所在。任何指针?另外,是否可以确切地看到客户端将请求发送到哪个路径(以确保我的设置没有任何问题)?我已通读 API 但没有找到任何内容。
您用来发送 REST 调用的是 Apache CXF 吗?
一般来说,如果您注意到您手动尝试的操作与您的代码执行的操作之间存在差异,启用日志记录会有所帮助,这样您就可以比较您的代码是否真的做了同样的事情(可能不是)。
对于 Apache CXF,此处描述了如何启用日志记录:
即使这不能立即帮助您,将这些日志添加到您的问题中也会很有用,以便其他人更容易发现问题。
我正在尝试通过 Jira Rest Api 从 JIRA 获取问题。当我使用 curl 时没问题,而且我得到了我想要的问题。问题是我想通过 Java 代码(我使用 maven changes 插件,做了一些小的修改)来做到这一点,但是插件没有发现问题。我收到 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 请求,它给了我预期的结果:
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 给了我预期的结果(一个问题),但是这个 returns 一个 200 响应但没有问题。
我似乎无法找出问题所在。任何指针?另外,是否可以确切地看到客户端将请求发送到哪个路径(以确保我的设置没有任何问题)?我已通读 API 但没有找到任何内容。
您用来发送 REST 调用的是 Apache CXF 吗?
一般来说,如果您注意到您手动尝试的操作与您的代码执行的操作之间存在差异,启用日志记录会有所帮助,这样您就可以比较您的代码是否真的做了同样的事情(可能不是)。
对于 Apache CXF,此处描述了如何启用日志记录:
即使这不能立即帮助您,将这些日志添加到您的问题中也会很有用,以便其他人更容易发现问题。