카테고리 없음

Java RestTemplate Query String 처리하기

devwriter 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)