책 검색 api를 활용해서 검색 기능을 구현하려는데 한글 검색이 안됩니다

문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.


스프링부트3, 자바17 버전 사용하고있어요

package com.KakaoBookApi.Service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

@Service
public class ApiService {

    private final RestTemplate restTemplate;

    @Autowired
    public ApiService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
    
    
    
    public void searchBooks() {
    	String url = "https://dapi.kakao.com/v3/search/book";
    	String apiKey = "";
    	String queryParam = "한글";
    	String target = "title";
    	
    	UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
    		    .queryParam("query", queryParam)
    		    .queryParam("target", target);

		HttpHeaders headers = new HttpHeaders();
		headers.set("Authorization", "KakaoAK " + apiKey);
		
		HttpEntity<String> entity = new HttpEntity<>(headers);

		
		ResponseEntity<String> response = restTemplate.exchange(
			    builder.toUriString(), 
			    HttpMethod.GET, 
			    entity, 
			    String.class
			);
		
		String responseBody = response.getBody();
		System.out.println("결과 : " + responseBody);
    	
    }
    
	
}

이런 식의 서비스 클래스를 만들어서 searchBooks 매서드를 실행시켰을때
queryParam에 영문 쿼리를 보내면


결과가 잘 나오는데 한글 쿼리를 보내면

이런식으로 결과 값이 텅 비어 있습니다… 이유를 잘 모르겠어요.
한글 쿼리를 보낼 때 다른 방법을 써야 하는 건가요?!

혹시 한글 쿼리가 utf-8로 인코딩되지 않아서 발생하는 문제인줄 알고 인코딩된 String 값을 query에 직접 대입하여도 결과가 나오지 않습니다…

안녕하세요.

restTemplate.exchange 에서 인코딩이 두번 되었는데
builder.build().encode().toUri() 로 변경해보시겠어요?

1개의 좋아요

인코딩 문제였네요! 해결되었어요! 감사합니다!