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;
}
}