El bloque de recuperación de WS de Play Framework 2.2 (java) no detecta la excepción HTTP
-
21-12-2019 - |
Pregunta
Método estático (aparentemente) simple que invoca un buen servicio web conocido.
El servicio devuelve HTTP 500/Error interno del servidor si no se encuentra un registro coincidente, pero el bloque de recuperación de invocación nunca se ejecuta.
¿Me estoy perdiendo lo obvio o estoy haciendo algo descaradamente estúpido?
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;
}
}
);
}
Solución
recover
ayuda a uno a recuperarse de excepciones no detectadas.En este caso, una respuesta HTTP 500 no da como resultado un mensaje no detectado. Throwable
Presumiblemente, 500 significa que el siguiente bloque arrojará un error
property = _mapper.readValue(response.getBody(), Property.class);
Sin embargo, ya tienes esto envuelto en un bloque try catch.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow