스프링부트 Server to Server 3. Naver 지역 검색 API 연동

min seung moon·2021년 6월 30일
0

Spring

목록 보기
40/50

1. Naver open api

https://developers.naver.com/docs/common/openapiguide/


01. talend api test 사용

-1. 예제를 활용한 검색







  • Header에 발급받은 값을 입력


-2. query 값 직접 넣어보기

  • utf-8 encoding을 해주어야 한다
    • %로 된 값 확인 후 입력



02. Spring boot로 구현

  • talend api test랑 비교하면서 작성

-1. Server

  • controller / ServerApiController.java
package com.example.server.contoller;

import com.example.server.dto.Req;
import com.example.server.dto.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

@Slf4j
@RestController
@RequestMapping("/api/server")
public class ServerApiController {

    @GetMapping("/naver")
    public String naver() {

        String query = "갈비집";
        String encode = Base64.getEncoder().encodeToString(query.getBytes(StandardCharsets.UTF_8));

        // https://openapi.naver.com
        // /v1/search/local.json
        // ?query=%EA%B0%88%EB%B9%84%EC%A7%91
        // &display=10
        // &start=1
        // &sort=random
        URI uri = UriComponentsBuilder
                    .fromUriString("https://openapi.naver.com")
                    .path("/v1/search/local.json")
                    .queryParam("query", "대구")
                    .queryParam("display", 10)
                    .queryParam("start", 1)
                    .queryParam("sort", "random")
                    .encode()
                    .build()
                    .toUri();

        log.info("uri : {}", uri);
        RestTemplate restTemplate = new RestTemplate();

        // HEADER를 추가하기 위해서 RequestEntity 사용
        // Get으로 넣을것이기 때문에 Void로 지정
        RequestEntity<Void> req = RequestEntity
                .get(uri)
                .header("X-Naver-Client-Id", "OVh0yxPCcFXFATWfz_7I")
                .header("X-Naver-Client-Secret", "r4k5a_3sNn")
                .build();


        // Header를 사용하기 위해서 exchange 사용용
       ResponseEntity<String> response = restTemplate.exchange(req, String.class);

        return response.getBody();
    }

    @GetMapping("/hello")
    public User hello(@RequestParam String name, @RequestParam int age) {
        User user = new User();
        user.setName(name);
        user.setAge(age);
        return user;
    }

    @PostMapping("/user/{userId}/name/{userName}")
    public Req<User> post(
                    //HttpEntity<String> entity,
                    @RequestBody Req<User> user,
                    @PathVariable int userId,
                    @PathVariable String userName,
                    @RequestHeader("x-authorization") String authorization,
                    @RequestHeader("custom-header") String customHeader
                    ) {
        //log.info("req : {}", entity.getBody());
        log.info("userId : {}, userName : {}", userId, userName);
        log.info("authorization : {}", authorization);
        log.info("customHeader : {}",customHeader);
        //log.info("client request : {}",user);

        Req<User> response = new Req<>();
        response.setHeader(
                new Req.Header()
        );
        response.setResponseBody(user.getResponseBody());
        return response;
    }

}





profile
아직까지는 코린이!

0개의 댓글