@TedZhou
2020-10-15T08:45:04.000000Z
字数 1675
阅读 715
java spring
java后端发起http请求的方法经过不断演化(HttpURLConnection->HttpClient->CloseableHttpClient->RestTemplate),变得越来越简单方便。
Spingboot项目通过下面的配置,即可直接注入使用restTemplate很方便地发起http请求。
import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.client.ClientHttpRequestFactory;import org.springframework.http.client.SimpleClientHttpRequestFactory;import org.springframework.http.converter.HttpMessageConverter;import org.springframework.http.converter.StringHttpMessageConverter;import org.springframework.web.client.RestTemplate;@Configurationpublic class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory factory){RestTemplate template = new RestTemplate(factory);StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8")); //避免中文乱码List<HttpMessageConverter<?>> list= new ArrayList<HttpMessageConverter<?>>();list.add(stringHttpMessageConverter);template.setMessageConverters(list);return template;}@Beanpublic ClientHttpRequestFactory simpleClientHttpRequestFactory(){SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();factory.setConnectTimeout(15000);factory.setReadTimeout(5000);return factory;}}
调用restTemplate.getXXX()或postXXX()等方法即可发起对应Method的http请求。特殊的请求头和请求体可以在request参数里使用HttpEntity。如调用下面这个方法可以把data封装成xml请求:
HttpEntity<String> genXmlRequest(Object data) {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_XML);String body = XmlUtils.stringify(data, "xml");return new HttpEntity<String>(body, headers);}
