study/spring | java

[Select Shop] 셀렉샵 만들기 7. 키워드로 상품 검색하기①

_드레 2021. 6. 6. 21:58

[1] 검색어 바꾸기 (query 받기)

[NaverShopSearch.java]

public class NaverShopSearch {
    public String search(String query) {
        RestTemplate rest = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.add("X-Naver-Client-Id", "GuziZfI6S6a2kj4i6n1h");
        headers.add("X-Naver-Client-Secret", "czg3oFpmZg");
        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("아이맥");

    }
}

수정된 부분들 ↑

 


 

[2] org.json 패키지 설치하기

https://mvnrepository.com/ 에서 json검색 

가장 많이 사용하는 20160810 버전을 사용해본다. 

△ Gradle 선택하고 복사 

 build.gradle 에서 dependencies {} 안에 붙여넣고

 dependencies : Run

 build Success 시키고

 새로고침 버튼까지 눌러주면 라이브러리를 쓸 수 있는 상태가 된다. 

 

 


 

 

[3] 문자열 정보를 JSON Object로 바꾸기 

[NaverShopSearch.java] - 하단 수정

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

        JSONObject rjson = new JSONObject(result);
        System.out.println(rjson);
    }

△ rjson이 정상적으로 생성됐음을 확인 / items라는 키값 안에 검색 결과가 들어감 (json 리스트 (배열))

 

 


 

[4] JSON Object에서 items 배열 꺼내기

[NaverShopSearch.java] - 하단 수정

위 코드에서 아래 추가

JSONArray items = rjson.getJSONArray("items");

rjson에서 JSONArray를 꺼내겠다. 키값은 "items"

*sout문은 지워도 됨 (아까 rjson생성 확인한거)


 

 

[5] JSONArray로 for 문 돌기

[NaverShopSearch.java] - 하단 수정

for (int i=0; i<items.length(); i++) {
	JSONObject itemJson = (JSONObject) items.get(i);
	System.out.println(itemJson);
}

꺼낸 배열에 itemJson이라는 이름을 붙이겠다. 

그리고 출력

☞메인 메소드 실행

 



[6] JSONObject에서 String, int 데이터 뽑기

[NaverShopSearch.java] - 하단 수정

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

 

[7] ItemDto.java 클래스 생성하기

src > main > java > com.xxx.xxx > models  > 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");
    }
}

 

[8] fromJSONtoItems method 만들기

 

[NaverShopSearch.java] - 하단 for문에서 

이런식으로 ItemDto List 생성해서 써먹으면 되는데, 이걸 메소드로 만들어서 따로 빼자. 

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

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

        for (int i=0; i<items.length(); i++) {
            JSONObject itemJson = (JSONObject) items.get(i);
            ItemDto itemDto = new ItemDto(itemJson);
            itemDtoList.add(itemDto);

        }
        return itemDtoList;
    }

 

 

 

- NaverShopSearch.java 전체

package com.sparta.week04.utils;

import com.sparta.week04.models.ItemDto;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;

import java.util.ArrayList;
import java.util.List;

public class NaverShopSearch {
    public String search(String query) {
        RestTemplate rest = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.add("X-Naver-Client-Id", "GuziZfI6S6a2kj4i6n1h");
        headers.add("X-Naver-Client-Secret", "czg3oFpmZg");
        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 List<ItemDto> fromJSONtoItems(String result) {
        JSONObject rjson = new JSONObject(result);
        JSONArray items = rjson.getJSONArray("items");

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

        for (int i=0; i<items.length(); i++) {
            JSONObject itemJson = (JSONObject) items.get(i);
            ItemDto itemDto = new ItemDto(itemJson);
            itemDtoList.add(itemDto);

        }
        return itemDtoList;
    }

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

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

    }




}