본문 바로가기
스프링 (Spring)/SelectShop Project

SelectShop - 키워드로 상품 검색하기 1

by 후닝훈 2021. 8. 3.
반응형

요구 사항

  1. 검색어를 요구에 따라 바꿀 수 있어야 한다.
  2. 검색 결과를 문자열에서 DTO로 바꿔야 한다.

 

NaverShopSearch 메소드 바꾸기

    public String search(String query) {
        RestTemplate rest = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.add("X-Naver-Client-Id", "OpslHqgdp1eP3XNONuRx");
        headers.add("X-Naver-Client-Secret", "hcJSMxkk2y");
        String body = "";

        HttpEntity<String> requestEntity = new HttpEntity<String>(body, headers);
        ResponseEntity<String> responseEntity = rest.exchange("https://openapi.naver.com/v1/search/shop.json?query="+query, HttpMethod.GET, requestEntity, String.class);
        HttpStatus httpStatus = responseEntity.getStatusCode();
        int status = httpStatus.value();
        String response = responseEntity.getBody();
        System.out.println("Response status: " + status);
        System.out.println(response);

        return response;
    }

    public static void main(String[] args) {
        NaverShopSearch naverShopSearch = new NaverShopSearch();
        naverShopSearch.search("아이맥");
    }

 

검색 결과를 문자열에서 DTO로 변경하기

 

1. org.json 패키지 설치

- JSON을 자바에서 다루기 위해, JSONObject, JSONArray 클래스가 필요하다. 

- maven repository에서 가져오자.

https://mvnrepository.com/artifact/org.json/json

- build.gradle의 dependencies에 아래의 내용을 추가

// https://mvnrepository.com/artifact/org.json/json
implementation group: 'org.json', name: 'json', version: '20160810'

- Gradle을 새로 적용시켜준다

 

+ org.json 메소드

    public static void main(String[] args) {
        NaverShopSearch naverShopSearch = new NaverShopSearch();
        String result = naverShopSearch.search("아이맥");

        JSONObject rjson = new JSONObject(result);
        JSONArray items = rjson.getJSONArray("items");

        for (int i=0; i<items.length(); i++) {
            JSONObject itemJson = (JSONObject) items.get(i);
            JSONObject itemJson2 = items.getJSONObject(i);

            String title = itemJson.getString("title");
            String image = itemJson.getString("image");
            int lprice = itemJson.getInt("lprice");
        }
    }

 

2. ItemDto 생성

@Getter
public class ItemDto {
    private String title;
    private String link;
    private String image;
    private int lprice;

    public ItemDto(JSONObject itemJson) {
        this.title = itemJson.getString("title");
        this.link = itemJson.getString("link");
        this.image = itemJson.getString("image");
        this.lprice = itemJson.getInt("lprice");
    }
}

 

3. fromJSONtoItems 메소드 생성

    public List<ItemDto> fromJSONtoItems(String result) {
        JSONObject rjson = new JSONObject(result);
        JSONArray items  = rjson.getJSONArray("items");

        List<ItemDto> ret = new ArrayList<>();

        for (int i=0; i<items.length(); i++) {
            JSONObject itemJson = items.getJSONObject(i);
            ItemDto itemDto = new ItemDto(itemJson);
            ret.add(itemDto);
        }
        return ret;
    }

 

 

반응형

댓글