Feign – error handling

By | 2023년 2월 18일
Table of Contents

Feign – error handling

일반적인 오류가 아닌 애플리케이션 레벨에서 발생한 오류는 아래와 같이 처리할 수 있습니다.

일반적인 오류와 구분하기 위해 커스텀 오류코드를 사용하는 것이 좋습니다.

ErrorDecoder

public class FeignErrorDecoder implements ErrorDecoder {
    @Override
    public Exception decode(String methodKey, Response response) {
        switch (response.status()) {
            case 460: // 460 = custom error code
                ApiResponseMessage message;
                try (InputStream bodyIs = response.body().asInputStream()) {
                    ObjectMapper mapper = new ObjectMapper();
                    message = mapper.readValue(bodyIs, ApiResponseMessage.class);
                } catch (IOException e) {
                    return new Exception(e.getMessage());
                }
                return new ApiServerException(message.getMessage());
            default:
                return new Exception(response.reason());
        }
        return null;
    }
}

Custom Exception

public class ApiServerException extends RuntimeException {
    public ApiServerException(String message) {
        super(message);
    }
}

ControllerAdvice

@ControllerAdvice
public class ApiServerExceptionHandler {
    @ExceptionHandler({ApiServerException.class})
    public ResponseEntity<?> handleApiServerException(HttpServletResponse response, ApiServerException ex) throws IOException {
        ScriptUtil.alertAndBackPage(response, ex.getMessage());
        return null;
    }
}

답글 남기기