Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- transaction
- Proxy
- pointcut
- 스프링
- QueryDSL
- 알고리즘
- SpringBoot
- 김영한
- Thymeleaf
- kotlin
- spring
- Greedy
- db
- 인프런
- java
- 백준
- springdatajpa
- Exception
- jpa
- Servlet
- Android
- 스프링 핵심 기능
- 그리디
- JPQL
- AOP
- Spring Boot
- http
- 스프링 핵심 원리
- 자바
- JDBC
Archives
- Today
- Total
개발자되기 프로젝트
[Server] Oday Error 처리 본문
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");
});
}
?? 그런데 아무 값도 안들어 온다.
하지만 브라우저에서 확인해보면 전체 메시지가 다 보인다. 무슨차이지..
'Project > 대중교통 길찾기' 카테고리의 다른 글
[Server] Google Geocoding Error처리 (0) | 2022.02.05 |
---|---|
[Server] Oday Error 처리2 (0) | 2022.02.04 |
[Server] 단일책임 원칙 (0) | 2022.02.01 |
[Server] 효율성 개선 (0) | 2022.01.31 |
[Server] 4단계: 실시간 도착정보 연동(버스) (0) | 2022.01.30 |
Comments