es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , , , ,

Answer

  1. Avatar for 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:

    try {
        // código para llamar a microservicios usando Feign
    } catch (FeignException e) {
        String errorMessage = e.getCause().getMessage(); // obtener el mensaje de excepción
        int statusCode = e.status(); // obtener el código de estado HTTP
        if (StringUtils.containsIgnoreCase(errorMessage, "Not Found")) {
            errorMessage = "No encontrado";
        } // verificar si el mensaje de error contiene "No encontrado" y establecerlo como el mensaje de error
        log.error(errorMessage);
        model.addAttribute("errorMsg", errorMessage);
        return "error/error";
    }
    

    En este código, capturamos FeignException en lugar de Exception para obtener información más específica sobre el error. Luego extraemos el mensaje de excepción utilizando e.getCause().getMessage() y el código de estado HTTP utilizando e.status(). Utilizamos StringUtils.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.

Comments are closed.