[E-commerce App] FeignClient - ErrorDecoder를 이용한 예외 처리
이번에는 ErrorDecoder를 이용한 예외 처리를 해보자.
user-service
FeignErrorDecoder.java
public class FeignErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
switch (response.status()) {
case 400:
break;
case 404:
if(methodKey.contains("getOrders")) {
return new ResponseStatusException(HttpStatus.valueOf(response.status()),
env.getProperty("order-service.exception.order-is-empty"));
}
break;
default:
return new Exception(response.reason());
}
return null;
}
}
UserServiceImpl.java
UserServiceImpl
에서는 try-catch 문을 제거한다.
@Service
@Slf4j
public class UserServiceImpl implements UserService {
...
@Override
public UserDto getUserByUserId(String userId) {
UserEntity userEntity = userRepository.findByUserId(userId);
UserDto userDto = new ModelMapper().map(userEntity, UserDto.class);
// 주문 생성
/* Using Feign ErrorDecoder */
List<ResponseOrder> orderList = orderServiceClient.getOrders(userId);
userDto.setOrders(orderList);
return userDto;
}
}
native-file-repo/user-service.yml
order-service.exception.order-is-empty
에 404 에러가 발생했을 때 보여질 문구를 정의한다.
...
order-service:
url: http://ORDER-SERVICE/order-service/%s/orders
exception:
order-is-empty: User's order is empty.
테스트
user-service
에서 break point를 찍고 디버깅모드로 실행한다.
위와 같이 설정 파일에서 정보를 잘 읽어왔음을 확인할 수 있다.
포스트맨으로 테스트 했을 때, 404 에러가 발생하고 에러 메시지가 잘 출력된다.
💛 개인 공부 기록용 블로그입니다. 👻