Блок восстановления WS Play Framework 2.2 (java) не перехватывает исключение HTTP

StackOverflow https://stackoverflow.com//questions/21011199

Вопрос

(Казалось бы) простой статический метод, вызывающий заведомо исправный веб-сервис.

Служба возвращает HTTP 500/внутреннюю ошибку сервера, если соответствующая запись не найдена, но блок восстановления вызова никогда не выполняется.

Я упускаю очевидное или делаю что-то явно глупое?

public static Promise<Property> ByPhone(String phone) {
  return WS.url("http://localhost:9000/data/property/" + phone)
           .get ()
           .map (
              new Function<WS.Response, Property>() {
                public Property apply (WS.Response response) {
                  System.out.println("got here: " + response.getStatusText());
                  Property property = null;
                  try {
                    property = _mapper.readValue(response.getBody(), Property.class);
                  } catch (Throwable t) {
                    t.printStackTrace();
                  }
                  return property;
                }
              }
            ).recover (
              new Function<Throwable, Property>() {
                public Property apply (Throwable t) {
                  System.out.println("never get here");
                  t.printStackTrace();
                  return null;
                }
              }
            );
}
Это было полезно?

Решение

recover помогает восстановиться после неперехваченных исключений.В этом случае ответ HTTP 500 не приводит к неперехваченному Throwable

Предположительно, 500 означает, что следующий блок выдаст ошибку.

property = _mapper.readValue(response.getBody(), Property.class);

Однако у вас это уже заключено в блоке try catch.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top