일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- QueryDSL
- 알고리즘
- java
- SpringBoot
- Servlet
- 스프링
- Spring Boot
- Proxy
- Android
- http
- Thymeleaf
- springdatajpa
- 그리디
- 백준
- kotlin
- jpa
- JPQL
- db
- transaction
- spring
- 스프링 핵심 기능
- Exception
- Greedy
- 인프런
- 스프링 핵심 원리
- JDBC
- AOP
- 자바
- 김영한
- pointcut
- Today
- Total
목록Project/대중교통 길찾기 (41)
개발자되기 프로젝트
현재 유저가 data를 잘못 입력할 경우 IllegalArgumentException이 발생한다. 이 경우는 유저가 잘 못 요청하여 발행한 예외이기 때문에 500이 아니라 400을 return하고자 한다. ExceptionResolver를 사용하면 간단히 해결이 가능하다. [API예외] HandlerExceptionResolver 예외가 발생해서 서블릿을 넘어 WAS까지 예외가 전달되면 HTTP 상태코드가 500으로 처리된다. 발생하는 예외에 따라서 400, 404 등등 다른 상태코드로 처리하고 싶은데? 오류 메시지, 형식등을 AP bsh-developer.tistory.com 1. ExceptionResolver IllegalArgumentException의 경우 400으로 return @Slf4j p..
1. Return값 분석 { "results" : [ { "address_components" : [ .... }, "place_id" : "ChIJ2eUgeAK6j4ARbn5u_wAGqWA", "plus_code": { "compound_code": "CWC8+W5 Mountain View, California, United States", "global_code": "849VCWC8+W5" }, "types" : [ "street_address" ] } ], "status" : "OK" } GoogleGeoCoding을 상태값을 바로바로 return한다. OK OK ZERO_RESULTS indicates that the geocode was successful but returned no resul..
PostMan에서 에러 메시지를 못받은 문제는 시간이 지나니 해결됐다. 단순히 서버의 문제였던 것 같다. 또한 Test작성 중 다른 형태의 에러 메시지도 확인이 되었다. {"result":{"error":{"msg":"예기치 못한 오류가 발생하였습니다.","code":"null"}}} 해당 형태의 메시지도 처리할 수 있도록 코드를 변경하자. 1. OdayClient 서로다른 두 구조의 json을 처리하기 위해 코드를 분리하였다. private void errorCheck(JSONObject jsonResult) { if (jsonResult.isNull("result")){ errorMessageType1(jsonResult); }else{ errorMessageType2(jsonResult); } } ..
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. Ods..
기존 ApiController는 너무 많은 책임을 가지고 있었다. 단순히 api를 호출하는 기능 외에도, api요청을 위한 req객체 생성 및 api에서 받은 data를 res객체로 변환하는책임도 가지고 있었다. 유지보수에도 번거로우며, 단일책임 원칙에도 부합하지 않는다. Factory를 만들어 res, req객체 생성을 위임하도록 하자. 1. ResFactory api 요청을 위한 req객체, api로부터 받은 json을기반으로 res객체를 만들어 model에 담는다. public class ResFactory { private SearchLocationReq searchLocationReq; private Model model; private GoogleClient googleClient; priva..
이전 코드는 모든 SubPath객체 생성시 바로 실시간 정보를 요청했다. 이로인해 필요없는 data에 대해 api를 호출하는 등 리소스 낭비가 심했다. 현재 코드는 출발지->경유지, 경유지->목적지 각각 2개씩 경로를 사용한다. 따라서 실제로 view에 오프한 path에 대해서만 실시간 정보를 요청하는 것이 합리적이다. 1. SubPath.class 생성자에서 odsayClient를 호출하는 것이 아닌 메서드를 통해 별도로 처리함. 모든 subPath객체에 대해서 생성하지 않아도 됨. public void getStationIdAndRealTimeInfo(OdSayClient odSayClient) { if (this.trafficType == 2){ this.stationId = odSayClient...
1. 대중교통 정류장 검색 특정 버스정류장의 실시간 도착정보를 알기 위해서는 해당 정류장의 arsID가 필요하다. 정류소의 상세 정보는 ODsay에서 제공하는 대중교통 정류장 검색 API를 사용하겠다. ODsay LAB 버스노선 조회(Bus Route) 버스노선 리스트를 리턴합니다. 매서드 요청 URI 출력 포맷 GET/POST https://api.odsay.com/v1/api/searchBusLane json, xml • 파라미터(Parameter) 번호 파라미터 필수값 설명 예시 공통 apiKey lab.odsay.com 위와 같이 간단하게 정류장 이름만 넘겨주면 된다. 하지만 문제가 있다. 예를들어 "잠실역" 버스정류장을 검색하면 여러 개가 조회된다. 아래 지도와 같이 세 정류장 모두 잠실역이다...
대중교통 길찾기에 경유지를 추가해 보자. 구현방법은 간단하다. 지금까지는 "출발지->목적지"에 대해서만 검색을 했다. 이번에는 "출발지->경유지", "경유지->목적지"로 검색을 해보자. 이 때 각 경로의 수는 여러 개이다. 따라서 경로로 중 각각 2개식만 뽑아서 총 4개의 경로를 만든다. 1. SearchLocationReq form에서 받아야할 정보가 하나 늘었다. @Data @AllArgsConstructor @NoArgsConstructor public class SearchLocationReq { private String start; private String end; private String middle; private MultiValueMap makeQuery(){ LinkedMultiVa..