Open InJunKangW opened 4 months ago
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.nhnacademy.naver.BookDto;
import com.nhnacademy.naver.BookResponse;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
@slf4j
@controller
@RequestMapping("/test")
@requiredargsconstructor
public class AladinController {
private final RestTemplate restTemplate;
@GetMapping
public String test(Model model) throws JsonProcessingException {
String rawString = "이해"; // 검색할 제목
byte[] bytes = rawString.getBytes(StandardCharsets.UTF_8);
String utf8EncodedString = new String(bytes, StandardCharsets.UTF_8); // 제목의 utf-8 인코딩된 값.
//제목 검색 - 리스트 보기.
URI uri = UriComponentsBuilder
.fromUriString("http://www.aladin.co.kr")
.path("/ttb/api/ItemSearch.aspx")
.queryParam("TTBKey","ttbjasmine066220924001") // 알라딘 api client 키 값
.queryParam("Query",utf8EncodedString)
.queryParam("QueryType","Title")
.encode()
.build()
.toUri();
/*
* Isbn13으로 책 검색.
* URI uri = UriComponentsBuilder
* .fromUriString("http://www.aladin.co.kr/")
* .path("/ttb/api/ItemLookUp.aspx")
* .queryParam("TTBKey","ttbjasmine066220924001")
* .queryParam("ItemId","9791193528174") //검색할 값. 해당 ISBN 13인 책만 나옴. title이랑 다르게 완전히 일치해야 하는 것 같습니다.
* .queryParam("ItemIdType", "ISBN13") // 검색할 기준 . Title, ISBN, ISBN 13으로 가능.
* .encode()
* .build()
* .toUri();
*/
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.exchange(RequestEntity.get(uri).build(), String.class);
ObjectMapper objectMapper = new ObjectMapper();
String responseBody = responseEntity.getBody();
System.out.println("rep body : " + responseBody);
XmlMapper xmlMapper = new XmlMapper();
BookResponse bookResponse = xmlMapper.readValue(responseBody, BookResponse.class);
List<BookDto> bookList = bookResponse.getBooks();
System.out.println(bookList);
model.addAttribute("bookList", bookList);
return "test";
}
}
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Data
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class BookDto {
private String title;
private String link;
private String cover;
private String author;
private String publisher;
private String priceStandard;
private String pubdate;
private String priceSales;
private String discount;
}
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import java.util.List;
import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class BookResponse {
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "item")
private List<BookDto> books;
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div th:each="book : ${bookList}">
<div th:text="'제목: ' + ${book.title}"></div>
<div th:text="'정가' + ${book.priceStandard}"></div>
<div th:text="'판매가(할인가) : ' +${book.priceSales}"></div>
<img th:src="${book.cover}" alt="" width="200px" height="300px">
</div>
</body>
</html>
알라딘 조회 api 사용법
당장 작동되게 구현은 했는데 지피티가 해준 게 대부분이라, 자세한 설명은 더 찾아보고 하겠습니다.
추후 수정 예정..