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