spring restTemplate 进行http请求的工具类封装

本文为博主原创,未经允许不得转载:

  1.对常用调用的方法进行封装:

 

复制代码
import org.springframework.http.HttpHeaders;

import com.alibaba.fastjson.JSONObject;


public interface SpringRestService {

    public <T> T postWithJson(String url, JSONObject param, Class<T> responseType);

    public <T> T postWithJson(String url, HttpHeaders headers, JSONObject param, Class<T> responseType);

    public <T> T postWithJson(String url, HttpHeaders headers, String param, Class<T> responseType);

    public <T> T getForObject(String url, Class<T> responseType);

    public String getForObject(String url, HttpHeaders headers);

    public String getForXml(String url, HttpHeaders headers);

}
复制代码

 

  2.对上面接口实现封装:

复制代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import com.alibaba.fastjson.JSONObject;
import com.intf.service.springrest.SpringRestService;


@Service("springRestService")
public class SpringRestServiceImpl implements SpringRestService {

    @Autowired
    private RestTemplate restTemplate;
    
    private static final Logger LOGGER = LoggerFactory.getLogger(SpringRestServiceImpl.class);

    @Override
    public <T> T postWithJson(String url, JSONObject param, Class<T> responseType) {
        // 设置请求头
        HttpHeaders headers = new HttpHeaders();
        // 设置ContentType
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
        // 请求
        return postWithJson(url, headers, param, responseType);
    }

    @Override
    public <T> T postWithJson(String url, HttpHeaders headers, JSONObject param, Class<T> responseType) {
        // 请求
        return postWithJson(url, headers, param.toString(), responseType);
    }

    @Override
    public <T> T postWithJson(String url, HttpHeaders headers, String param, Class<T> responseType) {
        // 设置ContentType
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
        // 请求中设置param和headers
        HttpEntity<String> request = new HttpEntity<>(param, headers);
        // post请求并返回
        return restTemplate.postForObject(url, request, responseType);
    }

    @Override
    public <T> T getForObject(String url, Class<T> responseType) {
        // get请求并返回
        return restTemplate.getForObject(url, responseType);
    }

    @Override
    public String getForObject(String url, HttpHeaders headers) {
        // 设置ContentType
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
        // 设置请求头
        HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);
        // get请求获取响应内容
        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);
        // 返回响应body
        return response.getBody();
    }

    @Override
    public String getForXml(String url, HttpHeaders headers) {
        // 设置ACCEPT
        headers.add("Accept", MediaType.APPLICATION_XML_VALUE);
        // 设置ContentType
        headers.setContentType(MediaType.APPLICATION_XML);
        // 设置请求头
        HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);
        // get请求获取响应内容
        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);
        // 返回响应body
        LOGGER.info(url + "&&&&&" + response.toString() + "&&&&&" + response.getBody());
        return response.getBody();
    }
}
复制代码

 

posted @   香吧香  阅读(2206)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示