MSA

개별 마이크로 서비스 Custom Exception 처리

soonrise 2023. 11. 12. 13:04

1.개별 마이크로서비스 내에 ErrorDecoder를 구현한 구현체인 클래스 생성

methodKey는 에러를 유발한 메서드의 이름이 저장되는 파라미터

response는 응답 정보를 담고있는 파라미터

public class FeignError implements ErrorDecoder {
    @Override
    public Exception decode(String methodKey, Response response) {
 		return null;
	}
}

 

switch~case문을 이용해 먼저 에러코드를 지정해주고

특정 에러코드 내에서는 조건문을 이용해, 어떤 메서드를 통해 에러가 유발되는지 적어주고

마지막으로 발생시킬 예외를 차레로 작성합니다.

 switch(response.status()) {
            case 404:
                if(methodKey.contains("에러를 유발한 메서드명(get~~~~~)")) {
                    return new UserNotEnrolledTeamException("에러메시지 표기");
                }
	    case 500:
             
        }

 

 

2.ErrorDecoder를 구현한 구현체 Exception을 Configuration 클래스 내에서 빈으로 등록

package com.example.itemservice.config;

import com.example.itemservice.util.CustomFeignException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ExceptionConfiguration {
    @Bean
    public CustomFeignException getCustomFeginException(){
        return new CustomFeignException();
    }
}

 

 

3. service 단에서 ResponseStatusException 호출

@Service
@RequiredArgsConstructor
public class ItemService {
    private final ItemRepository itemRepository;
    
    public ResponseOrderByItemDto findOrderByProduct(String productId){
        Item finditem = itemRepository.findItemByProductId(productId)
                .orElseThrow(()-> new ResponseStatusException(HttpStatus.NOT_FOUND, "해당 아이템은 없습니다"));
        }
 }