상세 컨텐츠

본문 제목

ch4. rest API 개발(1) - naverAPI setting

패캠스프링/part3._스프링입문(part3)

by hippo0207 2022. 8. 16. 13:22

본문

1. 지역검색, 이미지검색 api 토대로 yaml생성

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
>> 이건 모키토때문
=====================
naver:
  url:
    search:
      local: https://openapi.naver.com/v1/search/local.json
      image: https://openapi.naver.com/v1/search/image
  client:
    id: QL0yLyXpTNGl8wERPmUp
    secret: SGRA5GhpO4

 

2. naverClient생성

  • yaml값 가져오기 가능 << @Value("${})
@Component
public class NaverClient {

    @Value("${naver.client.id}")
    private String naverClientId;

    @Value("${naver.client.secret}")
    private String naverClientSecret;

    @Value("${naver.url.search.local}")
    private String naverLocalSearchUrl;

    @Value("${naver.url.search.image}")
    private String naverImageSearchUrl;

    public SearchLocalRes searchLocal(SearchLocalReq searchLocalReq){}
    public void searchImage(){}
  • 지역api 용 요청변수 dto생성
    • request parameter 쉽게 가져오기위한 MultiValueMap 메소드 생성
  • 출력결과용 dto 생성
    • item/items >> list로 return 되므로 리스트용 클래스 내부생성 필요
    • item/items 밑에애들은 items에 포함되나봄

@Data
@NoArgsConstructor
@AllArgsConstructor
public class SearchLocalRes {

   ~~~
    private List<SearchLocalItem> items;

        @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class SearchLocalItem{
        private String title;
        private String link;
        private String description;
        private String telephone;
        private String address;
        private String roadAddress;
        private int mapx;
        private int mapy;
    }
  • naverClient.java >> searchLocal()
    public SearchLocalRes searchLocal(SearchLocalReq searchLocalReq){
        var uri = UriComponentsBuilder.fromUriString(naverLocalSearchUrl)
                .queryParams(searchLocalReq.toMultiValueMap())
                .build()
                .encode()
                .toUri();

        var headers = new HttpHeaders();
        headers.set("X-Naver-Client-Id", naverClientId);
        headers.set("X-Naver-Client-Secret", naverClientSecret);
        headers.setContentType(MediaType.APPLICATION_JSON);

        var httpEntity = new HttpEntity<>(headers);
        var responseType = new ParameterizedTypeReference<SearchLocalRes>(){};

        var responseEntity = new RestTemplate().exchange(
                uri,
                HttpMethod.GET,
                httpEntity,
                responseType
        );

        return responseEntity.getBody();
    }
  • naverClientTest >> resources > application.yml 복붙해두기
@SpringBootTest
public class NaverClientTest {

    @Autowired
    private NaverClient naverClient;

    @Test
    public void searchLocalTest(){

        var search = new SearchLocalReq();
        search.setQuery("갈비집");

        var result = naverClient.searchLocal(search);

        System.out.println(result);

    }
}
  • image쪽도 비슷함

관련글 더보기

댓글 영역