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


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

    1.OkHttp

    1.1引入okhtpp依赖

    1. <dependency>
    2. <groupId>com.squareup.okhttp3groupId>
    3. <artifactId>okhttpartifactId>
    4. <version>4.9.1version>
    5. dependency>

    1.2封装一个请求的方法

    1. private T requestBase(Object object, String tag, Class resultClass) {
    2. T result = null;
    3. OkHttpClient client = new OkHttpClient().newBuilder()
    4. .connectTimeout(90, TimeUnit.SECONDS)
    5. .writeTimeout(90, TimeUnit.SECONDS)
    6. .readTimeout(90, TimeUnit.SECONDS)
    7. .build();
    8. okhttp3.MediaType mediaType = okhttp3.MediaType.parse("text/plain");
    9. RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(object));
    10. Request request = new Request.Builder()
    11. .url("https://www.xxx.xxx./xxx/" + tag).method("POST", body)
    12. .addHeader("Content-Type", "text/plain")
    13. .build();
    14. Response response = null;
    15. try {
    16. response = client.newCall(request).execute();
    17. String originResult = response.body().string();
    18. result = JSON.parseObject(originResult, resultClass);
    19. } catch (IOException e) {
    20. e.printStackTrace();
    21. }
    22. return result;
    23. }

    其实就两步,构建客户端client,构建请求request,客户端client去调用newCall(request)发起请求

    2.RestTemplate

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

    2.1 添加配置类RestTemplateConfig

    1. @Configuration
    2. public class RestTemplateConfig {
    3. @Bean
    4. public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
    5. RestTemplate restTemplate = new RestTemplate(factory);
    6. restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
    7. return restTemplate;
    8. }
    9. @Bean
    10. public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
    11. SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    12. factory.setConnectTimeout(180000);
    13. factory.setReadTimeout(180000);
    14. return factory;
    15. }
    16. }

    2.2封装一个通用的方法

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

    写法相对简单一些
     

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

  • 相关阅读:
    【C++基础】10. 指针
    指针(三)- 二级指针、野指针、空指针
    努力一周,开源一个超好用的接口Mock工具——Msw-Tools
    企业密码管理器
    C++中setfill,setw,setbase,setprecision的作用
    web前端进阶<7>:3d图像翻转效果
    Unity容器构造函数参数循环引用问题及解决
    MySQL高阶语句(一)
    swift内存绑定
    评测管理的业务逻辑
  • 原文地址:https://blog.csdn.net/m0_63553261/article/details/141048884