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

发布于:2024-08-14 ⋅ 阅读:(107) ⋅ 点赞:(0)

应用场景:主要是为了在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();
    }

写法相对简单一些
 

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


网站公告

今日签到

点亮在社区的每一天
去签到