ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java RestTemplate Query String 처리하기
    카테고리 없음 2023. 2. 18. 22:02

    https://api.com/path?a=1&b=2&c=3 이라는 url 을 만들어서 GET 요청을 하고 싶어요.

    restTemplate.getForObject(url, String.class) 

    로 처리하면 간단해요.

     

    그런데 query string 을 객체 속성으로 만들고 싶다면?

    @Data
    class Sample {
        private String a;
        private String b;
        private String c;
    }

    1. 일일이 url String 조합을 만든다.

    String url = "http://api.com/path?a=" 
    	+ sample.getA() 
        + "&b=" + sample.getB() 
        + "&c=" + sample.getC();
    restTemplate.getForObject(url, String.class)

    2. getForObject 의 기능을 이용한다.

    String url = "http://api.com/path?a={a}&b={b}&c={c}"
    String a = sample.getA();
    String b = sample.getB();
    String c = sample.getC();
    restTemplate.getForObject(url, String.class, a, b, c);

    3. UriComponentBuilder 를 이용한다.

    String url = UriComponentBuilder.fromUriString("http://api.com/paht")
        .queryParam("a", sample.getA())
        .queryParam("b", sample.getB())
        .queryParam("c", sample.getC())
        .toUriString();
    restTemplate.getForObject(url, String.class)

    손수 일일이 하나씩 하기 귀찮아요.

    ObjectMapper 를 이용해 보죠.

    Map map = objectMapper.convertValue(sample, 
        new TypeReference<Map<String, String>() {});
    MultiValueMap<String, String> params = new LinkedMultiValueMap();
    params.setAll(map);
    
    String url = UriComponentBuilder.fromUriString("http://api.com/path")
        .queryParams(params)
        .toUriString();
    
    restTemplate.getForObject(url, String.class)
Designed by Tistory.