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, "해당 아이템은 없습니다"));
}
}