0

我正在使用 RestTemplate 对 asana 的 REST Api 进行 GET 调用。通过在我打电话时使用邮递员:

https://app.asana.com/api/1.0/events?resource=PROJECT_ID

我收到一条消息和一个同步令牌(同步令牌太旧需要更新时也是如此)。

通过使用 RestTemplate,当同步令牌太旧时\它是我第一次调用并且我需要一个同步令牌,我得到一个 412 响应“预测失败”。这也发生在邮递员中,但我正在处理新同步令牌的“错误”消息。

使用 RestTemplate 我得到的只是这个错误:

2015 年 8 月 6 日下午 3:56:55 org.springframework.web.client.RestTemplate handleResponseError 警告:获取请求 foPROJECT_ID21650756795165”导致 412(前提条件失败);调用线程“主”org.springframework.web.client 中的错误处理程序异常.HttpClientErrorException: 412 Precondition Failed at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:90) at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:494) at org.springframework.web .client.RestTemplate.doExecute(RestTemplate.java:451) 在 org.springframework.web.client.RestTemplate.execute(RestTemplate.java:409) 在 org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:385 ) 在availo.worker.asana.MainTask.getEvents(MainTask.java:86) 在availo.worker.asana.MainTask.getProjects(MainTask.java:76) 在availo.worker.asana.MainTask.main(MainTask.java:115)

有什么建议么?

谢谢!

4

2 回答 2

1

这对我有用。它使您可以阅读错误附带的消息:

restTemplate.setErrorHandler(new DefaultResponseErrorHandler(){ protected boolean hasError(HttpStatus statusCode) { return false; }});

于 2015-08-09T12:46:39.397 回答
0

首次订阅资源上的事件时,您将收到 412 Precondition Failed 响应代码,因为尚未建立同步令牌。您应该提取该同步令牌并在下一个请求中使用它以开始接收事件。

由于 412 响应代码,看起来 RestTemplate 正在调用错误处理程序,这是可以理解的,因为 412 是错误代码。

如果您可以覆盖DefaultResponseErrorHandler.handleError(),请检查响应是否为 412,然后提取同步令牌,您可以在下一个请求中传递它以获取资源上的事件。

另一种选择是使用我们的Java 客户端库,它应该会为您处理所有这些。

这是使用我们的客户端的样子:

System.out.println("Watching for events on project: " + project.name);

for (Event event : client.events.get(project.id)) {
    System.out.println("User: " + event.user.name + "\nAction: " + event.action + "\nResource: " + event.resource);
}
于 2015-08-06T17:17:33.047 回答