ItemDto.java 생성
models 패키지 내부에: 가져온 정보를 클라이언트에 돌려주기 위한 것
@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");
}
}
컨트롤러에서 NaverShopSearch 메소드 호출해서 문자열 받고
다시 fromJSONtoItems 에 input 으로 결과를 받고 돌려주면 된다.
> main 필요없으니까 삭제
> 최종 완성된 NaverShopSearch.java
public class NaverShopSearch {
public String search(String query) {
RestTemplate rest = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("X-Naver-Client-Id", "HhGR9UabgJRwK_UEfYEN");
headers.add("X-Naver-Client-Secret", "0Zh_2e9QCT");
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); // result 는 JSONObject 로 만드는 문자열
JSONArray items = rjson.getJSONArray("items"); // rjson 에서 JSONArray 배열을 꺼내겠다.
List<ItemDto> itemDtoList = new ArrayList<>(); // 여러개의 검색결과가 나오게 하기 위해 List 배열 생성
// itemDtoList 내에 itemDto 를 전부 넣어주고 Controller 에서 반환
for (int i=0; i<items.length(); i++) { // JSONArray 로 for 문 돌기
JSONObject itemJson = items.getJSONObject(i);
ItemDto itemDto = new ItemDto(itemJson); // 만들어 논 itemDto 이용
itemDtoList.add(itemDto);
}
return itemDtoList;
}
}
네이버 API와 서비스 연결하기
1. 사용자가 검색어를 입력하면, 컨트롤러가 전달받고
2. 전달받은 검색어로 네이버 API 에 요청하고 사용자에게 응답하는 과정
GET 방식 /api/search?query=검색어
Ø main 메소드가 아닌 Controller 에서 검색을 한다.
Ø NaverShopSearch 컴포넌트 등록하기 :
스프링이 자동으로 필요한 클래스를 필요한 곳에 생성하려면, 사용자가 요구할 때 자동으로 생성할 클래스 목록을 확인할 수 있어야 함. 그 목록에 등록하는 방법이 컴포넌트등록
@Component 추가
컴포넌트 : https://mommoo.tistory.com/55
함수 객체 컴퓨넌트 등 용어 정리 : 차이점 바로 말씀드립니다~ 함수 클래스 객체 인스턴스 모듈 컴포넌트 API OpenAPI CBD - YouTube
Ø controller 패키지 내에 SearchRequestController. java 만들기 : 검색 관련
@RequiredArgsConstructor // final 로 선언된 클래스를 자동으로 생성합니다.
@RestController // JSON으로 응답함을 선언합니다.
public class SearchRequestController {
private final NaverShopSearch naverShopSearch;
@GetMapping("/api/search")
public List<ItemDto> getItems(@RequestParam String query) { // @RequestParam : (? 뒤에 있는)파라미터들의 요청
String result = naverShopSearch.search(query);
return naverShopSearch.fromJSONtoItems(result);
}
}
HTML 파일 분리하여 만들기
src > main > resources > static 내부에 index.html baisc.js style.css 파일 생성
'강의정리들 > [2021] Spring Boot' 카테고리의 다른 글
스프링 웹 프로젝트 배포하는 방법 (0) | 2022.11.06 |
---|---|
[코스파] 스프링 기초 4주차-4 (0) | 2022.01.11 |
[코스파] 스프링 기초 4주차-2 (0) | 2022.01.02 |
[코스파] 스프링 기초 4주차-1 (0) | 2022.01.02 |
[코스파] 스프링 기초 3주차 (0) | 2022.01.01 |