본문 바로가기

웹 기술 쌈싸먹기/Spring

[Spring / Servlet] Servlet??? Servlet 상품검색 API 예제

Servlet???

 

1) Servlet이란?

  • Servlet(서블릿)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말함

 

Servlet으로 상품검색 API 예제

 

 

1) 프로젝트 구성

 

  • ItemDto.class (검색결과를 담을 객체)
@Getter
public class ItemDto {
    private String title;
    private String link;
    private String image;
    private int lprice;
}

 

  • ItemSearchServlet.class (네이버 쇼핑 검색 API)
@WebServlet(urlPatterns = "/api/search")
public class ItemSearchServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 1. API Request 의 파라미터 값에서 검색어 추출 -> query 변수
        String query = request.getParameter("query");

        // 2. 네이버 쇼핑 API 호출에 필요한 Header, Body 정리
        RestTemplate rest = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.add("X-Naver-Client-Id", "네이버 쇼핑 API 아이디 입력!!!");
        headers.add("X-Naver-Client-Secret", "네이버 쇼핑 API 패스워드 입력!!!");
        String body = "";
        HttpEntity<String> requestEntity = new HttpEntity<>(body, headers);

        // 3. 네이버 쇼핑 API 호출 결과 -> naverApiResponseJson (JSON 형태)
        ResponseEntity<String> responseEntity = rest.exchange("https://openapi.naver.com/v1/search/shop.json?query=" + query, HttpMethod.GET, requestEntity, String.class);
        String naverApiResponseJson = responseEntity.getBody();

        // 4. naverApiResponseJson (JSON 형태) -> itemDtoList (자바 객체 형태)
        //  - naverApiResponseJson 에서 우리가 사용할 데이터만 추출 -> List<ItemDto> 객체로 변환
        ObjectMapper objectMapper = new ObjectMapper()
                .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        JsonNode itemsNode = objectMapper.readTree(naverApiResponseJson).get("items");
        List<ItemDto> itemDtoList = objectMapper
                .readerFor(new TypeReference<List<ItemDto>>() {})
                .readValue(itemsNode);

        // 5. API Response 보내기
        //  5.1) response 의 header 설정
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        //  5.2) response 의 body 설정
        PrintWriter out = response.getWriter();
        //     - itemDtoList (자바 객체 형태) -> itemDtoListJson (JSON 형태)
        String itemDtoListJson = objectMapper.writeValueAsString(itemDtoList);
        out.print(itemDtoListJson);
        out.flush();
    }
}

 

  • SpringcoreApplication.class (실행 파일)
    @ServletComponentScan // @WebServlet 어노테이션이 동작하게 함
    @SpringBootApplication
    public class SpringcoreApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringcoreApplication.class, args);
        }
    }
    • "상품 검색 API" 동작 순서
    • API 동작 검증(Advanced REST Client 이용해서 API 동작 검증)
http://localhost:8080/api/search?query=노트북