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
- 스프링
- java
- JPQL
- db
- pointcut
- 스프링 핵심 기능
- 스프링 핵심 원리
- 알고리즘
- Proxy
- Thymeleaf
- QueryDSL
- Android
- spring
- Exception
- 그리디
- transaction
- Servlet
- 인프런
- kotlin
- springdatajpa
- 백준
- Spring Boot
- 자바
- jpa
- AOP
- 김영한
- http
- SpringBoot
- Greedy
- JDBC
Archives
- Today
- Total
개발자되기 프로젝트
[Server] Oday Error 처리2 본문
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
'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