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 {

    @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;
    }

}

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();
    }

写法相对简单一些
 

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

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值