package com.navercorp.pinpoint.testapp.service.remote; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import com.fasterxml.jackson.databind.ObjectMapper; /** * @author koo.taejin */ @Component public class HttpRemoteService implements RemoteService { private static final ObjectMapper objectMapper = new ObjectMapper(); @Override public <R> R get(String url, Class<R> responseType) throws Exception { HttpUriRequest httpMethod = createGet(url, new LinkedMultiValueMap<String, String>()); return execute(httpMethod, responseType); } @Override public <R> R get(String url, MultiValueMap<String, String> params, Class<R> responseType) throws Exception { HttpUriRequest httpMethod = createGet(url, params); return execute(httpMethod, responseType); } @Override public <R> R post(String url, Class<R> responseType) throws Exception { HttpUriRequest httpMethod = createPost(url, new LinkedMultiValueMap<String, String>()); return execute(httpMethod, responseType); } @Override public <R> R post(String url, MultiValueMap<String, String> params, Class<R> responseType) throws Exception { HttpUriRequest httpMethod = createPost(url, params); return execute(httpMethod, responseType); } private HttpGet createGet(String url, MultiValueMap<String, String> params) throws URISyntaxException { URIBuilder uri = new URIBuilder(url); for (Map.Entry<String, List<String>> entry : params.entrySet()) { String key = entry.getKey(); for (String value : entry.getValue()) { uri.addParameter(key, value); } } return new HttpGet(uri.build()); } private HttpPost createPost(String url, MultiValueMap<String, String> params) throws UnsupportedEncodingException { HttpPost post = new HttpPost(url); List<NameValuePair> nvps = new ArrayList<NameValuePair>(); for (Map.Entry<String, List<String>> entry : params.entrySet()) { String key = entry.getKey(); for (String value : entry.getValue()) { nvps.add(new BasicNameValuePair(key, value)); } } post.setEntity(new UrlEncodedFormEntity(nvps)); return post; } private <R> R execute(HttpUriRequest httpMethod, Class<R> responseType) throws Exception { CloseableHttpClient httpclient = HttpClients.createDefault(); CloseableHttpResponse response = httpclient.execute(httpMethod); HttpEntity entity = response.getEntity(); return objectMapper.readValue(entity.getContent(), responseType); } }