应用场景:主要是为了在java代码中去调用第三方的接口。
- <dependency>
- <groupId>com.squareup.okhttp3groupId>
- <artifactId>okhttpartifactId>
- <version>4.9.1version>
- dependency>
- private
T requestBase(Object object, String tag, Class resultClass) { - T result = null;
- OkHttpClient client = new OkHttpClient().newBuilder()
- .connectTimeout(90, TimeUnit.SECONDS)
- .writeTimeout(90, TimeUnit.SECONDS)
- .readTimeout(90, TimeUnit.SECONDS)
- .build();
- okhttp3.MediaType mediaType = okhttp3.MediaType.parse("text/plain");
- RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(object));
- Request request = new Request.Builder()
- .url("https://www.xxx.xxx./xxx/" + tag).method("POST", body)
- .addHeader("Content-Type", "text/plain")
- .build();
- Response response = null;
- try {
- response = client.newCall(request).execute();
- String originResult = response.body().string();
- result = JSON.parseObject(originResult, resultClass);
- } catch (IOException e) {
- e.printStackTrace();
- }
- return result;
- }
其实就两步,构建客户端client,构建请求request,客户端client去调用newCall(request)发起请求
这个是由我们Spring框架中的web依赖提供的,不用额外引入,但需要一个配置类。
- @Configuration
- public class RestTemplateConfig {
-
- @Bean
- public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
- RestTemplate restTemplate = new RestTemplate(factory);
- restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
- return restTemplate;
- }
-
- @Bean
- public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
- SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
- factory.setConnectTimeout(180000);
- factory.setReadTimeout(180000);
- return factory;
- }
-
- }
- public
T requestBase(Object requestBody, String tag, Class resultClass) { - HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.APPLICATION_JSON);
- HttpEntity httpEntity = new HttpEntity(requestBody, headers);
- ResponseEntity
response = restTemplate.postForEntity("https://www.xxx.xxx./xxx/" + tag, httpEntity, resultClass); - return response.getBody();
- }
写法相对简单一些
总结:上述两种方法没有限制,想使用哪个用哪个,其实实际运用中最好是封装一个工具类。不想自己封装的,上网搜一下,最好还是自己封装,理解更深一些,再搜搜别的稍加补充。