Skip to content

Commit f639562

Browse files
committed
[feat/#170] post API connection 서비스키 인식완료
1 parent 8c1b507 commit f639562

2 files changed

Lines changed: 51 additions & 29 deletions

File tree

src/main/java/goodspace/backend/shipping/controller/ShippingTraceController.java

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.fasterxml.jackson.core.JsonProcessingException;
44
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
6+
import goodspace.backend.shipping.dto.ShippingDetailDto;
57
import goodspace.backend.shipping.dto.ShippingResponseDto;
68
import goodspace.backend.shipping.service.ShippingTraceService;
79
import lombok.RequiredArgsConstructor;
@@ -10,45 +12,28 @@
1012
import org.springframework.web.bind.annotation.RequestMapping;
1113
import org.springframework.web.bind.annotation.RequestParam;
1214
import org.springframework.web.bind.annotation.RestController;
15+
import org.springframework.web.util.UriComponentsBuilder;
1316

14-
import java.io.UnsupportedEncodingException;
15-
import java.net.URLEncoder;
17+
import java.io.IOException;
18+
import java.io.InputStream;
19+
import java.net.*;
1620
import java.nio.charset.StandardCharsets;
1721

22+
1823
@RestController
1924
@RequestMapping("/shipping")
2025
@RequiredArgsConstructor
2126
public class ShippingTraceController {
2227
private final ShippingTraceService shippingTraceService;
2328

2429
@Value("${api.epost.shipping-service-key}")
25-
private String ServiceKey;
30+
private String serviceKey;
2631

2732
private String baseUrl =
2833
"http://openapi.epost.go.kr/trace/retrieveLongitudinalCombinedService/retrieveLongitudinalCombinedService/getLongitudinalCombinedList";
2934

30-
@GetMapping("/shippingDetatil")
31-
public String getShippingDetail(@RequestParam String rgist) {
32-
33-
34-
//TODO : url 뿌려주고 DTo받았으니 이 데이터를 활용해야함. 새로운 detail업데이트 and status업데이트
35-
try {
36-
String encodedServiceKey = URLEncoder.encode(ServiceKey, StandardCharsets.UTF_8.toString());
37-
String url = baseUrl + "?ServiceKey=" + encodedServiceKey + "&rgist=" + rgist;
38-
ShippingResponseDto shippingResponseDto = shippingTraceService.requestShippingStatus(url);
39-
System.out.println(url);
40-
ObjectMapper mapper = new ObjectMapper();
41-
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(shippingResponseDto);
42-
System.out.println(json);
43-
44-
return json;
45-
} catch (JsonProcessingException e) {
46-
e.printStackTrace();
47-
return "JSON 변환 중 오류 발생";
48-
} catch (UnsupportedEncodingException e) {
49-
e.printStackTrace();
50-
return "인코딩 변환 실패";
51-
}
52-
35+
@GetMapping("/shippingDetail")
36+
public ShippingResponseDto getShippingDetail(@RequestParam String rgist) throws Exception {
37+
return shippingTraceService.requestShippingStatus(serviceKey, rgist);
5338
}
5439
}
Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package goodspace.backend.shipping.service;
22

3+
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
34
import goodspace.backend.shipping.dto.ShippingResponseDto;
45
import lombok.AllArgsConstructor;
56
import lombok.NoArgsConstructor;
@@ -9,15 +10,51 @@
910
import org.springframework.transaction.annotation.Transactional;
1011
import org.springframework.web.client.RestTemplate;
1112

13+
import java.io.BufferedReader;
14+
import java.io.InputStreamReader;
15+
import java.net.HttpURLConnection;
16+
import java.net.URI;
17+
import java.net.URL;
18+
import java.net.URLEncoder;
19+
import java.nio.charset.StandardCharsets;
20+
1221
@Service
1322
@Transactional
1423
@RequiredArgsConstructor
1524
public class ShippingTraceService {
1625
private final RestTemplate restTemplate;
1726

18-
public ShippingResponseDto requestShippingStatus(String url){
19-
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
2027

21-
return restTemplate.getForObject(url, ShippingResponseDto.class);
28+
public ShippingResponseDto requestShippingStatus(String serviceKey, String rgist) throws Exception {
29+
String baseUrl = "http://openapi.epost.go.kr/trace/retrieveLongitudinalCombinedService/retrieveLongitudinalCombinedService/getLongitudinalCombinedList";
30+
31+
// 서비스키와 등기번호를 URL에 직접 추가
32+
String urlStr = baseUrl + "?ServiceKey=" + URLEncoder.encode(serviceKey, StandardCharsets.UTF_8)
33+
+ "&rgist=" + URLEncoder.encode(rgist, StandardCharsets.UTF_8);
34+
35+
URL url = new URL(urlStr);
36+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
37+
conn.setRequestMethod("GET");
38+
conn.setRequestProperty("Content-type", "application/xml"); // XML 요청
39+
40+
// 응답 읽기
41+
BufferedReader rd;
42+
if (conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
43+
rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
44+
} else {
45+
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream(), StandardCharsets.UTF_8));
46+
}
47+
48+
StringBuilder sb = new StringBuilder();
49+
String line;
50+
while ((line = rd.readLine()) != null) {
51+
sb.append(line);
52+
}
53+
rd.close();
54+
conn.disconnect();
55+
56+
// XML을 ShippingResponseDto로 변환
57+
XmlMapper xmlMapper = new XmlMapper();
58+
return xmlMapper.readValue(sb.toString(), ShippingResponseDto.class);
2259
}
2360
}

0 commit comments

Comments
 (0)