Browse Source

비행계획서 - 지도 검색 API

feature/auth
junheelee 2 years ago
parent
commit
262ee838fb
  1. 24
      src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java
  2. 59
      src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java

24
src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java

@ -5,6 +5,7 @@ import com.palnet.biz.api.bas.flight.service.BasFlightService;
import com.palnet.biz.api.comn.response.BasicResponse;
import com.palnet.biz.api.comn.response.ErrorResponse;
import com.palnet.biz.api.comn.response.SuccessResponse;
import com.palnet.comn.code.RSErrorCode;
import com.palnet.comn.exception.CustomException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -19,6 +20,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.io.*;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -257,4 +259,26 @@ public class BasFlightController {
}
//지역 검색
@GetMapping("/plan/area/search")
public ResponseEntity<? extends BasicResponse> searchArea(String query) throws ParseException {
String text = null;
try {
text = URLEncoder.encode(query, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("검색어 ㅇ ㅣㄴ코딩 실패", e);
}
String apiURL = "https://openapi.naver.com/v1/search/local.json?query=" + text + "&display=5";
Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put("X-Naver-Client-Id", "WGEct3bJhQC0pyMsP_GK");
requestHeaders.put("X-Naver-Client-Secret", "Q4K4OtUYol");
String responseBody = basFlightService.searchArea(apiURL, requestHeaders);
JSONParser parser = new JSONParser();
Object obj = parser.parse(responseBody);
return ResponseEntity.ok().body(new SuccessResponse<>(obj));
}
}

59
src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java

@ -1,8 +1,16 @@
package com.palnet.biz.api.bas.flight.service;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.palnet.comn.code.ErrorCode;
@ -520,4 +528,55 @@ public class BasFlightService {
return result;
}
//지역 검색
public String searchArea(String apiUrl, Map<String, String> requestHeaders) {
HttpURLConnection con = connect(apiUrl);
try {
con.setRequestMethod("GET");
for(Map.Entry<String, String> header :requestHeaders.entrySet()) {
con.setRequestProperty(header.getKey(), header.getValue());
}
int responseCode = con.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK) {
return readBody(con.getInputStream());
} else {
return readBody(con.getErrorStream());
}
} catch (IOException e) {
throw new RuntimeException("API 요청과 응답 실패", e);
} finally {
con.disconnect();
}
}
public HttpURLConnection connect(String apiUrl) {
try {
URL url = new URL(apiUrl);
return (HttpURLConnection)url.openConnection();
} catch (MalformedURLException e) {
throw new RuntimeException("API URL이 잘못되었습니다. : " + apiUrl, e);
} catch (IOException e) {
throw new RuntimeException("연결이 실패했습니다. : " + apiUrl, e);
}
}
public String readBody(InputStream body) {
InputStreamReader streamReader = new InputStreamReader(body);
try(BufferedReader lineReader = new BufferedReader(streamReader)) {
StringBuilder responseBody = new StringBuilder();
String line;
while ((line = lineReader.readLine()) != null) {
responseBody.append(line);
}
return responseBody.toString();
} catch (IOException e) {
throw new RuntimeException("API 응답을 읽는데 실패했습니다.", e);
}
}
}

Loading…
Cancel
Save