Cómo intentar…capturar una excepción de Feign y devolver solo el código de estado y el mensaje de error.
Estoy trabajando en una aplicación SpringBootApplication. En esta aplicación tengo 4 microservicios que usan Feign para comunicarse entre sí. En un Controlador tengo un fragmento de código como el siguiente, para capturar excepciones y devolverlas a la vista en caso de que algo esté mal.
try {
patientDTO = patientProxyFeign.getPatientById(id);
noteDTOList = historyProxyFeign.getAll(id);
assessmentDTO = assessmentProxyFeign.getPatientAssessment(id);
} catch (Exception e) {
log.error("" + e.getMessage());
model.addAttribute("errorMsg", e.toString());
return "error/error";
}
Si hay una excepción, obtengo un mensaje como este en la vista:
feign.FeignException$NotFound: [404] durante [GET] a [http://localhost:8081/patient/12000] [PatientProxyFeign#getPatientById(Integer)]: [{"timestamp":"2021-12-16T16:21:27.790+00:00","status":404,"error":"Not Found","path":"/patient/12000"}]
Lo que quiero hacer es obtener solo el código de estado y el mensaje “not found”.
¿Alguien tiene alguna idea de cómo hacerlo? (Busqué en Google, pero parece ser demasiado específico. Probablemente no esté usando las palabras clave correctas).
davy.ai
Para extraer solo el código de estado y el mensaje “no encontrado” del mensaje de excepción, puedes utilizar el siguiente fragmento de código:
En este código, capturamos
FeignException
en lugar deException
para obtener información más específica sobre el error. Luego extraemos el mensaje de excepción utilizandoe.getCause().getMessage()
y el código de estado HTTP utilizandoe.status()
. UtilizamosStringUtils.containsIgnoreCase()
para verificar si el mensaje de error contiene “No encontrado” y establecerlo como el mensaje de error. Por último, registramos el mensaje de error y devolvemos la vista con el mensaje de error agregado al modelo.