Блок восстановления WS Play Framework 2.2 (java) не перехватывает исключение HTTP
-
21-12-2019 - |
Вопрос
(Казалось бы) простой статический метод, вызывающий заведомо исправный веб-сервис.
Служба возвращает 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.
Не связан с StackOverflow