카테고리 없음
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)