java处理响应为流的结果

本文介绍了一种使用RestTemplate发起HTTP请求并处理流形式响应的方法。通过示例代码展示了如何配置RestTemplate、设置请求头以及获取流式响应数据,并将其转换为Base64字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

restTemplate处理响应结果是流的形式

1. 工具类

import java.nio.charset.Charset;

import org.springframework.core.io.Resource;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import net.sf.json.JSONObject;

public final class RestUtils {

    /**
     * 请求代理
     */
    private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
    /**
     * 请求工厂
     */
    private static SimpleClientHttpRequestFactory requestFactory = null;

    static {
        requestFactory = new SimpleClientHttpRequestFactory();
        //可配置化
        requestFactory.setConnectTimeout(1000000);
        //可配置化
        requestFactory.setReadTimeout(1000000);
    }

    /**
     * 默认构造函数
     */
    private RestUtils() {
    }

    /**
     * http请求头
     *
     * @return 请求头
     */
    public static HttpHeaders getHttpHeader() {
        HttpHeaders headers = new HttpHeaders();
        headers.add("User-Agent", USER_AGENT);
        headers.add("Content-Type", "application/json;charset=UTF-8");
        headers.add("Accept", "*/*");
        headers.add("Connection", "keep-alive");
        return headers;
    }

    /**
     * get 请求
     * @param url   请求地址
     * @param clazz 结果类
     * @param <T>   结果对象
     * @return 结果对象
     */
    public static <T> T doGet(String url,HttpEntity<String> entity, Class<T> clazz) {
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(Charset.forName("UTF-8")));
        return restTemplate.exchange(url, HttpMethod.GET, entity, clazz).getBody();
    }

    /**
     * post 请求
     * @param url    请求地址
     * @param clazz  结果类
     * @param params post参数
     * @param <T>    返回值
     * @return 结果对象
     */
    public static <T> T doPost(String url, Class<T> clazz, JSONObject params) {
        HttpHeaders httpHeader = getHttpHeader();
        HttpEntity<Object> requestEntity = new HttpEntity<Object>(params, httpHeader);
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(Charset.forName("UTF-8")));
        return restTemplate.exchange(url, HttpMethod.POST, requestEntity, clazz).getBody();
    }

    /**
     * post 请求
     * @param url    请求地址
     * @param params post参数
     * @return 结果对象
     */
    public static ResponseEntity<Resource> doPostStream(String url, JSONObject params) {
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(Charset.forName("UTF-8")));
        return restTemplate.postForEntity(url, params, Resource.class);
    }

    /**
     * 处理Get请求,响应的是流的形式
     * @param url
     * @param Authorization
     * @return
     */
    public static ResponseEntity<Resource> doGetStream(String url, String Authorization) {
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", Authorization);
        HttpEntity<Object> entity = new HttpEntity<Object>(headers);
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(Charset.forName("UTF-8")));
        return restTemplate.exchange(url, HttpMethod.GET, entity, Resource.class);
    }

}

2. 处理响应结果为流的形式

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;

ResponseEntity<Resource> entity = RestUtils.doGetStream(url, authorization);
            if (entity.getStatusCode().value() == 200 || entity.getStatusCode().value() == 201)
            {
            	//得到响应的流
                is = entity.getBody().getInputStream();
                byte[] bytes = IOUtils.toByteArray(is);
                //图片的base64串
                String base64String = Base64.encodeBase64String(bytes);
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值