2015-08-06 2 views
0

Я использую RestTemplate для вызова GET для REST Apana Асаны. Используя почтальон, когда я звоню:Event Sync Token (статус ответа 412)

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

Я получаю сообщение об ошибке и синхронизации маркера (это тот самый случай, когда синхронизация маркеров слишком стары и должны быть возобновлены).

С помощью RestTemplate, когда токен синхронизации слишком старый \ его первый вызов, который я делаю, и мне нужен токен синхронизации, я получаю ответ 412 «Prediction Faild». Это происходит и в почтальоне, но я получаю сообщение об ошибке «новый».

С 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)

Любые предложения?

Спасибо!

ответ

0

При первом подписании на Events ресурса вы получите код ответа 412 Precondition Failed из-за того, что еще не установлен токен синхронизации. Вы должны извлечь этот токен синхронизации и использовать его в своем следующем запросе для начала приема событий.

Похоже, что RestTemplate вызывает обработчик ошибок из-за кода ответа 412, что понятно, так как код ошибки 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); 
} 
+0

Спасибо! Мне удалось это сделать, единственное, что я заметил, что есть задержка между событием и индексированием на сервере ... Когда я вызываю список событий, после добавления задачи, например , иногда он ничего не показывает, и это занимает около 10 секунд, пока я снова не позвоню и не вернусь к событию ... –

+0

Звучит примерно так. Это явная проблема для вас? Учитывая, что наше текущее событие генерации событий происходит почти в реальном времени, но не мгновенно. Я могу добавить некоторые документы вокруг этого, чтобы сделать его более понятным. –

0

Это работало для меня. Он позволяет вам прочитать сообщение, которое приходит с ошибкой:

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

Смежные вопросы