事件同步令牌(412 响应状态)

Event Sync Token (412 response status )

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

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

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

通过使用 RestTemplate,当同步令牌太旧\它是我进行的第一个调用并且我需要同步令牌时,我收到 412 响应 "Prediction Faild"。 这也发生在邮递员身上,但我正在接受新同步令牌的 "error" 消息。

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

Aug 06, 2015 3:56:55 PM org.springframework.web.client.RestTemplate handleResponseError WARNING: GET request foPROJECT_ID21650756795165" resulted in 412 (Precondition Failed); invoking error handler Exception in thread "main" 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) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:409) at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:385) at availo.worker.asana.MainTask.getEvents(MainTask.java:86) at availo.worker.asana.MainTask.getProjects(MainTask.java:76) at availo.worker.asana.MainTask.main(MainTask.java:115)

有什么建议吗?

谢谢!

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

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

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

另一种选择是使用我们的 Java client library,它应该会为您处理所有这一切。

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

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

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

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