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 처리 본문

Project/대중교통 길찾기

[Server] Oday Error 처리

Seung__ 2022. 2. 3. 01:09

ODsay에서는 상황에 따라 error코드를 return한다.

 

현재는 error발생 시 return값에 data가 없어서 parsing시 JsonException이 발생한다.

 

따라서 Odsay에서 예외 코드가 넘어올 경우 이를 처리해 줄 수 있는 로직이 필요하다.

 

1. ODsay 에러코드


500 서버 내부 오류
-1 실시간 엔진 내부 오류
-8 필수 입력값 형식 및 범위 오류
-9 필수 입력값 누락
-10 노선 정보가 없는 경우
-11 실시간 정보 제공 지역이 아님
-12 저유장 아이디가 잘못된 경우
3 출발지 정류장이 없습니다.
4 도착지 정류장이 없습니다.
5 출, 도착지 정류장이 없습니다.
6 서비스 지역이 아닙니다.
-98 출, 도착지가 700m이내입니다.
-99 검색결과가 없습니다.

 

 

2. OdsayClient


각 메서드에서 api로부터 return값을 받은 후 JsonObject로 변환한 직후에 error메시지가 있는지 확인한다.

private void errorCheck(JSONObject jsonResult) {
    //error체크
    if (!jsonResult.isNull("error")){
        JSONObject jsonErrorInfo = jsonResult.getJSONArray("error").getJSONObject(0);
        String errorCode = (String) jsonErrorInfo.get("code");
        String 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);
        }else {
            throw new IllegalArgumentException(message);
        }

    }
}

 

 

3. Test


일단 잘못된 key가 넘어간 경우 odsay에서 errorCode 500을 리턴한다.

500발생시 IllegalStateException을 발생시키는지 확인해보자.

class OdSayClientTest {
    @Autowired OdSayClient odSayClient;
    @Autowired
    MockMvc mockMvc;

    @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("", "126.9707979959352","37.5547020732267");
        });
    }
}

 

각 메서드에 대해서 정상적으로 작동한다.

[ODsay Error] errorCode: 500
[ODsay Error] errorMessage: [ApiKeyAuthFailed] ApiKey authentication failed.

 

다음은 data를 빈칸으로 넘겨보자.  빈칸으로 넘길경우 errorCode -8이 리턴되어 IllegalArgsException이 발생해야 한다.

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

 

?? 그런데 아무 값도 안들어 온다.

하지만 브라우저에서 확인해보면 전체 메시지가 다 보인다. 무슨차이지..

Comments