Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[Server] Oday Error 처리2 본문

Project/대중교통 길찾기

[Server] Oday Error 처리2

Seung__ 2022. 2. 4. 01:00

PostMan에서 에러 메시지를 못받은 문제는 시간이 지나니 해결됐다. 단순히 서버의 문제였던 것 같다.

 

또한 Test작성 중 다른 형태의 에러 메시지도 확인이 되었다.

{"result":{"error":{"msg":"예기치 못한 오류가 발생하였습니다.","code":"null"}}}

 

해당 형태의 메시지도 처리할 수 있도록 코드를 변경하자.

 

1. OdayClient


서로다른 두 구조의 json을 처리하기 위해 코드를 분리하였다.

private void errorCheck(JSONObject jsonResult) {
   if (jsonResult.isNull("result")){
       errorMessageType1(jsonResult);
   }else{
      errorMessageType2(jsonResult);
   }
}

private void errorMessageType1(JSONObject jsonResult) {
    //error체크
    if (!jsonResult.isNull("error")){

        if (jsonResult.getJSONArray("error").isEmpty()){
            log.info("[ODsay Error] errorCode: 500");
            throw new IllegalStateException("예상치 못한 에러가 발생했습니다.");
        }
        JSONArray jsonErrorArray = jsonResult.getJSONArray("error");
        for (int i=0; i<jsonErrorArray.length(); i++){
            JSONObject jsonErrorInfo = jsonErrorArray.getJSONObject(0);
            errorCode = (String) jsonErrorInfo.get("code");
            message = (String) jsonErrorInfo.get("message");
            log.info("[ODsay Error] errorCode: {}", errorCode);
            log.info("[ODsay Error] errorMessage: {}", message);

            if (errorCode.equals("500") ||errorCode.equals("-1")){
                throw new IllegalStateException(message);
            }
        }
            throw new IllegalArgumentException(message);
    }
}

private void errorMessageType2(JSONObject jsonResult) {
    JSONObject abnormalErrorInfo = jsonResult.getJSONObject("result").getJSONObject("error");
    message = (String) abnormalErrorInfo.get("msg");
    errorCode = (String) abnormalErrorInfo.get("code");
    log.info("[ODsay Error] errorCode: {}", errorCode);
    log.info("[ODsay Error] errorMessage: {}", message);
    if(errorCode.equals("null")){
        throw new IllegalStateException(message);
    }else {
        throw new IllegalArgumentException(message);
    }
}

 

 

2. Test


  • 정류장id, 길찾기, 실시간 정보 얻어오는 메서드에 대해 test를 작성했다.
  • 빈 data를 보내는 경우, 잘못된 key를 전달하는 경우를 test했다.
  • 혹시 모를 의도치 않은 동작을 방지하기 위해, test후에는 key를 원상태로 돌려주었다.
@SpringBootTest
@AutoConfigureMockMvc
class OdSayClientTest {
    @Autowired OdSayClient odSayClient;
    @Value("${odsay.key}")
    private String key;

    @AfterEach
    public void rollbackKey(){
        odSayClient.changeKey(key);
    }

    @Test
    @DisplayName("send wrong key: getStationId")
    void wrongKey_getStationId(){
       odSayClient.changeKey("wrongKey");
        Assertions.assertThrows(IllegalStateException.class, () ->{
            odSayClient.getStationId("서울역", "126.9707979959352","37.5547020732267");
        });
    }

    @Test
    @DisplayName("send wrong key: SearchRoute")
    void wrongKey_searchRoute(){
        odSayClient.changeKey("wrongKey");
        SearchRouteReq searchRouteReq = new SearchRouteReq("126.9707979959352", "37.5547020732267", "127.10012275846414", "37.513264531390575");
        Assertions.assertThrows(IllegalStateException.class, () ->{
            odSayClient.searchRoute(searchRouteReq);
        });
    }

    @Test
    @DisplayName("send wrong key: RealTime Info")
    void wrongKey_realTimeInfo(){
        odSayClient.changeKey("wrongKey");
        SearchRealTimeStationReq searchRealTimeStationReq = new SearchRealTimeStationReq("102155", 1210);
        Assertions.assertThrows(IllegalStateException.class, () ->{
            odSayClient.getRealTimeBusStation(searchRealTimeStationReq);
        });
    }

   @Test
    @DisplayName("send Empty Data : getStationId")
    void emptyData_getStationId(){
        Assertions.assertThrows(IllegalArgumentException.class, () ->{
            odSayClient.getStationId("", "","");
        });
    }

    @Test
    @DisplayName("send Empty Data: SearchRoute --> errorCode: null")
    void emptyData_searchRoute(){
        SearchRouteReq searchRouteReq = new SearchRouteReq("", "", "", "");
        Assertions.assertThrows(IllegalStateException.class, () ->{
            odSayClient.searchRoute(searchRouteReq);
        });
    }

    @Test
    @DisplayName("send Empty Data: RealTime Info")
    void emptyData_realTimeInfo(){
        SearchRealTimeStationReq searchRealTimeStationReq = new SearchRealTimeStationReq("", null);
        Assertions.assertThrows(IllegalArgumentException.class, () ->{
            odSayClient.getRealTimeBusStation(searchRealTimeStationReq);
        });
    }
}

 

 

3. GitHub: 220204 OdsayErrorMessage 2


 

GitHub - bsh6463/commuteMap

Contribute to bsh6463/commuteMap development by creating an account on GitHub.

github.com

 

'Project > 대중교통 길찾기' 카테고리의 다른 글

[Server] Exception Resolver  (0) 2022.02.05
[Server] Google Geocoding Error처리  (0) 2022.02.05
[Server] Oday Error 처리  (0) 2022.02.03
[Server] 단일책임 원칙  (0) 2022.02.01
[Server] 효율성 개선  (0) 2022.01.31
Comments