我正在使用RestTemplate对asana的REST Api进行GET调用。 在我打电话时使用邮差:
我收到了一条消息和一个同步令牌(当同步令牌太旧而需要续订时,情况也是如此。)
通过使用RestTemplate,当同步令牌太旧\它是我正在进行的第一次调用时我需要一个同步令牌,我得到412响应“预测Faild”。 这种情况也发生在邮递员身上,但我与新同步令牌的“错误”消息相关。
使用RestTemplate,我得到的就是这个错误:
2015年8月6日下午3:56:55 org.springframework.web.client.RestTemplate handleResponseError 警告:GET请求foPROJECT_ID21650756795165“导致412(前提条件失败);调用错误处理程序 线程“main”中的异常org.springframework.web.client.HttpClientErrorException:412 Precondition Failed at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:90) 在org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:494) 在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) at availo.worker.asana.MainTask.getEvents(MainTask.java:86) at availo.worker.asana.MainTask.getProjects(MainTask.java:76) 在availo.worker.asana.MainTask.main(MainTask.java:115)
有什么建议吗?
谢谢!
答案 0 :(得分:0)
首次订阅资源上的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);
}
答案 1 :(得分:0)
这对我有用。它允许您阅读错误附带的消息:
restTemplate.setErrorHandler(new DefaultResponseErrorHandler(){ protected boolean hasError(HttpStatus statusCode){ 返回false; }});