728x90
요구조건 살펴보기)
- 사용자가 검색어를 입력하면, 컨트롤러가 그것을 전달받습니다.
- 전달받은 검색어로 네이버 API에 요청하고, 그 결과를 사용자에게 응답합니다.
NaverShopSearch를 컴포넌트로 등록을 해야 함
컴포넌트 등록:
스프링한테 필요할 때 알아서 쓰라는 권한을 주는 것
final 변수 선언 & @RequiredArgsConstructor 어노테이션 등록
스프링이 권한 판단을 요구할 때가 있음(자동으로 생성할 수 있는건지 아닌지)
사용자가 요구하면 자동으로 생성 가능한 클래스 목록이 있어야
스프링이 자동으로
필요한 클래스를 필요한 곳에 생성한다
- 컴포넌트 :
사용자가 요구하면 자동으로 생성 가능한 클래스 목록
- NaverShopSearch 컴포넌트 등록
이전에 만들어 둔 NaverShopSearch 클래스에 @Component 어노테이션만 등록하면 됨
/*NaverShopSearch.java*/
package com.sparta.week04.utils;
...
/* 딱 이거만 추가했음 */
@Component //컴포넌트 등록
public class NaverShopSearch {
//Java에서 url에 한글로 입력을 해도 인코딩을 알아서 해줌
public String search(String query) {
RestTemplate rest = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
//네이버 API가 정의한대로 헤더를 넘겨줌
headers.add("X-Naver-Client-Id", "Fzj17ucnTdxEPXlsLH8O");
headers.add("X-Naver-Client-Secret", "Tpspa8UeG_");
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(); //200이나 404 이런게 들어감
String response = responseEntity.getBody(); //Request에 대한 Response가 문자열로 들어감
System.out.println("Response status: " + status);
System.out.println(response);
return response;
}
public List<ItemDto> fromJSONtoItems(String result) {
JSONObject resultJson = new JSONObject(result);
System.out.println("resultJson :\n" + resultJson); //출력 결과 중 [] : json 배열(JSONArray 클래스)
JSONArray items = resultJson.getJSONArray("items"); //매개변수는 key:value 중 key값
List<ItemDto> itemDtoList = new ArrayList(); //클래스를 담을 List 선언
for (int i=0; i<items.length(); i++) { //JSONArray 클래스에서는 size()가 아닌 length()
JSONObject itemJson = items.getJSONObject(i); //= (JSONObject) items.get(i)
System.out.println("itemJson :\n" + itemJson);
ItemDto itemDto = new ItemDto(itemJson);
itemDtoList.add(itemDto);
}
return itemDtoList;
}
}
- SearchRequestController 만들기
키워드로 상품을 검색하고 그 결과를 목록으로 보여주기
/*SearchRequestController.java*/
package com.sparta.week04.controller;
...
//이 어노테이션을 넣음으로써 컴포넌트로 등록하는 것
@RequiredArgsConstructor // final 로 선언된 클래스를 자동으로 생성합니다. 컴포넌트로 등록되어있어야 가능한 기능
@RestController // JSON으로 응답함을 선언합니다.
public class SearchRequestController {
private final NaverShopSearch naverShopSearch;
@GetMapping("/api/search")
//@RequestParam: 요청 시 파라미터 중에 query라는 게 있으면 넣어주라는 뜻
public List<ItemDto> search(@RequestParam String query) {
String result = naverShopSearch.search(query); //리턴 String
List<ItemDto> itemDtoList = naverShopSearch.fromJSONtoItems(result);
return itemDtoList;
}
}
- 실행 결과
'Spring Framework' 카테고리의 다른 글
나만의셀렉샵) 상품 검색 기능 만들기 (0) | 2021.07.29 |
---|---|
나만의셀렉샵) HTML, 이미지 파일 준비하기 (0) | 2021.07.28 |
JSONObject, JSONArray (0) | 2021.07.27 |
나만의셀렉샵)키워드로 상품 검색하기 - NaverShopSearch 발전시키기 (0) | 2021.07.27 |
나만의셀렉샵) 관심 상품 등록하기 (0) | 2021.07.26 |