欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Java客户端Http请求工具Okhttp和RestTemplate的详细介绍

Java客户端Http请求工具Okhttp和RestTemplate的详细介绍

2024/10/25 11:20:47 来源:https://blog.csdn.net/m0_63553261/article/details/141048884  浏览:    关键词:Java客户端Http请求工具Okhttp和RestTemplate的详细介绍

应用场景:主要是为了在java代码中去调用第三方的接口。

1.OkHttp

1.1引入okhtpp依赖

        <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.1</version></dependency>

1.2封装一个请求的方法

private <T> T requestBase(Object object, String tag, Class<T> 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)发起请求

2.RestTemplate

这个是由我们Spring框架中的web依赖提供的,不用额外引入,但需要一个配置类。

2.1 添加配置类RestTemplateConfig

@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory factory) {RestTemplate restTemplate = new RestTemplate(factory);restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));return restTemplate;}@Beanpublic ClientHttpRequestFactory simpleClientHttpRequestFactory() {SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();factory.setConnectTimeout(180000);factory.setReadTimeout(180000);return factory;}}

2.2封装一个通用的方法

public <T> T requestBase(Object requestBody, String tag, Class<T> resultClass) {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);HttpEntity httpEntity = new HttpEntity(requestBody, headers);ResponseEntity<T> response = restTemplate.postForEntity("https://www.xxx.xxx./xxx/" + tag, httpEntity, resultClass);return response.getBody();}

写法相对简单一些
 

总结:上述两种方法没有限制,想使用哪个用哪个,其实实际运用中最好是封装一个工具类。不想自己封装的,上网搜一下,最好还是自己封装,理解更深一些,再搜搜别的稍加补充。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com