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

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

 

标签: spring

目录
相关文章
|
7天前
|
数据采集
Haskell爬虫:连接管理与HTTP请求性能
Haskell爬虫:连接管理与HTTP请求性能
|
13天前
|
数据采集 JSON API
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
本文探讨了在.NET环境下,如何通过异步方法和HTTP请求提高Web爬虫的响应速度和数据抓取效率。介绍了使用HttpClient结合async和await关键字实现异步HTTP请求,避免阻塞主线程,并通过设置代理IP、user-agent和cookie来优化爬虫性能。提供了代码示例,演示了如何集成这些技术以绕过目标网站的反爬机制,实现高效的数据抓取。最后,通过实例展示了如何应用这些技术获取API的JSON数据,强调了这些方法在提升爬虫性能和可靠性方面的重要性。
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
|
1天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
17 7
|
10天前
|
缓存 网络协议 安全
揭秘浏览器背后的神秘之旅:一网打尽HTTP请求流程,让你网络冲浪更顺畅!
【8月更文挑战第31天】当在浏览器中输入网址并按下回车键时,一系列复杂的HTTP请求流程随即启动。此流程始于DNS解析,将域名转化为IP地址;接着是与服务器的TCP三次握手建立连接。连接建立后,浏览器发送HTTP请求,其中包含请求方法、资源及版本等信息。服务器接收请求并处理后返回HTTP响应,包括状态码、描述及页面内容。浏览器解析响应,若状态码为200则渲染页面,否则显示错误页。整个流程还包括缓存处理和HTTPS加密等步骤,以提升效率和保障安全。理解该流程有助于更高效地利用网络资源。通过抓包工具如Wireshark,我们能更直观地观察和学习这一过程。
25 4
|
9天前
|
JSON 监控 API
http 请求系列
XMLHttpRequest(XHR)是一种用于在客户端和服务器之间进行异步HTTP请求的API,广泛应用于动态更新网页内容,无需重新加载整个页面。本文提供了多个官方学习资源,包括MDN Web Docs、WhatWG和W3C的规范文档,涵盖属性、方法、事件及示例代码。XHR的主要应用场景包括动态内容更新、异步表单提交、局部数据刷新等,具有广泛的支持和灵活性,但也存在处理异步请求的复杂性等问题。最佳实践包括使用异步请求、处理请求状态变化、设置请求头、处理错误和超时等。这些资源和实践将帮助你更好地理解和使用XHR。
17 1
|
10天前
|
缓存 Java 开发者
Spring高手之路22——AOP切面类的封装与解析
本篇文章深入解析了Spring AOP的工作机制,包括Advisor和TargetSource的构建与作用。通过详尽的源码分析和实际案例,帮助开发者全面理解AOP的核心技术,提升在实际项目中的应用能力。
9 0
Spring高手之路22——AOP切面类的封装与解析
|
2天前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
15 0
|
9天前
|
测试技术 持续交付 开发者
Xamarin 高效移动应用测试最佳实践大揭秘,从框架选择到持续集成,让你的应用质量无敌!
【8月更文挑战第31天】竞争激烈的移动应用市场,Xamarin 作为一款优秀的跨平台开发工具,提供了包括单元测试、集成测试及 UI 测试在内的全面测试方案。借助 Xamarin.UITest 框架,开发者能便捷地用 C# 编写测试案例,如登录功能测试;通过 Xamarin 模拟框架,则可在无需真实设备的情况下模拟各种环境测试应用表现;Xamarin.TestCloud 则支持在真实设备上执行自动化测试,确保应用兼容性。结合持续集成与部署策略,进一步提升测试效率与应用质量。掌握 Xamarin 的测试最佳实践,对确保应用稳定性和优化用户体验至关重要。
20 0
|
存储 JSON Java
Spring RestTemplate为何必须搭配MultiValueMap?
微服务之间的大多都是使用 HTTP 通信,这自然少不了使用 HttpClient。 在不适用 Spring 前,一般使用 Apache HttpClient 和 Ok HttpClient 等,而一旦引入 Spring,就有了更好选择 - RestTemplate。
298 0
Spring RestTemplate为何必须搭配MultiValueMap?
|
20天前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
下一篇
DDNS