如何使用RestTemplate访问restful服务
发布网友
发布时间:2022-04-21 19:55
我来回答
共2个回答
热心网友
时间:2022-04-19 02:38
一. 什么是RestTemplate
传统情况下在Java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate。
二、举个例子。 //请求地址
String url = "http://localhost:8080/testPost";
//入参
RequestBean requestBean = new RequestBean();
requestBean.setTest1("1");
requestBean.setTest2("2");
requestBean.setTest3("3");
RestTemplate restTemplate = new RestTemplate();
ResponseBean responseBean = restTemplate.postForObject(url, requestBean, ResponseBean.class);
从这个例子可以看出,使用restTemplate访问restful接口非常的简单粗暴无脑。(url,
requestMap, ResponseBean.class)这三个参数分别代表 请求地址、请求参数、HTTP响应转换被转换成的对象类型。
RestTemplate方法的名称遵循命名约定,第一部分指出正在调用什么HTTP方法,第二部分指示返回的内容。本例中调用了restTemplate.postForObject方法,post指调用了HTTP的post方法,Object指将HTTP响应转换为您选择的对象类型。
三.手动指定转换器(HttpMessageConverter)
我们知道,调用reseful接口传递的数据内容是json格式的字符串,返回的响应也是json格式的字符串。然而restTemplate.postForObject方法的请求参数RequestBean和返回参数ResponseBean却都是java类。是RestTemplate通过HttpMessageConverter自动帮我们做了转换的操作。
默认情况下RestTemplate自动帮我们注册了一组HttpMessageConverter用来处理一些不同的contentType的请求。
如StringHttpMessageConverter来处理text/plain;MappingJackson2HttpMessageConverter来处理application/json;MappingJackson2XmlHttpMessageConverter来处理application/xml。
你可以在org.springframework.http.converter包下找到所有spring帮我们实现好的转换器。
如果现有的转换器不能满足你的需求,你还可以实现org.springframework.http.converter.HttpMessageConverter接口自己写一个。
四.设置底层连接方式
要创建一个RestTemplate的实例,您可以简单地调用默认的无参数构造函数。这将使用java.NET包中的标准Java类作为底层实现来创建HTTP请求。
但很多时候我们需要像传统的HttpClient那样设置HTTP请求的一些属性。RestTemplate使用了一种很偷懒的方式实现了这个需求,那就是直接使用一个HttpClient作为底层实现......
五.设置*(ClientHttpRequestInterceptor)
有时候我们需要对请求做一些通用的拦截设置,这就可以使用*进行处理。*需要我们实现org.springframework.http.client.ClientHttpRequestInterceptor接口自己写。
以上是如何使用RestTemplate方便快捷的访问restful接口。其实RestTemplate的功能非常强大
热心网友
时间:2022-04-19 03:56
定义一个简单的restful接口
@RestController
public class TestController
{
@RequestMapping(value = "testPost", method = RequestMethod.POST)
public ResponseBean testPost(@RequestBody RequestBean requestBean)
{
ResponseBean responseBean = new ResponseBean();
responseBean.setRetCode("0000");
responseBean.setRetMsg("succ");
return responseBean;
}
}
使用RestTemplate访问该服务
//请求地址
String url = "http://localhost:8080/testPost";
//入参
RequestBean requestBean = new RequestBean();
requestBean.setTest1("1");
requestBean.setTest2("2");
requestBean.setTest3("3");
RestTemplate restTemplate = new RestTemplate();
ResponseBean responseBean = restTemplate.postForObject(url, requestBean, ResponseBean.class);
从这个例子可以看出,使用restTemplate访问restful接口非常的简单粗暴无脑。(url,
requestMap, ResponseBean.class)这三个参数分别代表 请求地址、请求参数、HTTP响应转换被转换成的对象类型。
RestTemplate方法的名称遵循命名约定,第一部分指出正在调用什么HTTP方法,第二部分指示返回的内容。本例中调用了restTemplate.postForObject方法,post指调用了HTTP的post方法,Object指将HTTP响应转换为您选择的对象类型。还有其他很多类似的方法,有兴趣的同学可以参考官方api。
三.手动指定转换器(HttpMessageConverter)
我们知道,调用reseful接口传递的数据内容是json格式的字符串,返回的响应也是json格式的字符串。然而restTemplate.postForObject方法的请求参数RequestBean和返回参数ResponseBean却都是java类。是RestTemplate通过HttpMessageConverter自动帮我们做了转换的操作。
默认情况下RestTemplate自动帮我们注册了一组HttpMessageConverter用来处理一些不同的contentType的请求。
如StringHttpMessageConverter来处理text/plain;MappingJackson2HttpMessageConverter来处理application/json;MappingJackson2XmlHttpMessageConverter来处理application/xml。
你可以在org.springframework.http.converter包下找到所有spring帮我们实现好的转换器。
如果现有的转换器不能满足你的需求,你还可以实现org.springframework.http.converter.HttpMessageConverter接口自己写一个。详情参考官方api。
选好了HttpMessageConverter后怎么把它注册到我们的RestTemplate中呢。
RestTemplate restTemplate = new RestTemplate();
//获取RestTemplate默认配置好的所有转换器
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
//默认的MappingJackson2HttpMessageConverter在第7个 先把它移除掉
messageConverters.remove(6);
//添加上GSON的转换器
messageConverters.add(6, new GsonHttpMessageConverter());
这个简单的例子展示了如何使用GsonHttpMessageConverter替换掉默认用来处理application/json的MappingJackson2HttpMessageConverter。
四.设置底层连接方式
要创建一个RestTemplate的实例,您可以像上述例子中简单地调用默认的无参数构造函数。这将使用java.NET包中的标准Java类作为底层实现来创建HTTP请求。
但很多时候我们需要像传统的HttpClient那样设置HTTP请求的一些属性。RestTemplate使用了一种很偷懒的方式实现了这个需求,那就是直接使用一个HttpClient作为底层实现......
//生成一个设置了连接超时时间、请求超时时间、异常最大重试次数的httpClient
RequestConfig config = RequestConfig.custom().setConnectionRequestTimeout(10000).setConnectTimeout(10000).setSocketTimeout(30000).build();
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultRequestConfig(config).setRetryHandler(new DefaultHttpRequestRetryHandler(5, false));
HttpClient httpClient = builder.build();
//使用httpClient创建一个ClientHttpRequestFactory的实现
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
//ClientHttpRequestFactory作为参数构造一个使用作为底层的RestTemplate
RestTemplate restTemplate = new RestTemplate(requestFactory);
五.设置*(ClientHttpRequestInterceptor)
有时候我们需要对请求做一些通用的拦截设置,这就可以使用*进行处理。*需要我们实现org.springframework.http.client.ClientHttpRequestInterceptor接口自己写。
举个简单的例子,写一个在header中根据请求内容和地址添加令牌的*。
public class TokenInterceptor implements ClientHttpRequestInterceptor
{
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException
{
//请求地址
String checkTokenUrl = request.getURI().getPath();
//token有效时间
int ttTime = (int) (System.currentTimeMillis() / 1000 + 1800);
//请求方法名 POST、GET等
String methodName = request.getMethod().name();
//请求内容
String requestBody = new String(body);
//生成令牌 此处调用一个自己写的方法,有兴趣的朋友可以自行google如何使用ak/sk生成token,此方法跟本教程无关,就不贴出来了
String token = TokenHelper.generateToken(checkTokenUrl, ttTime, methodName, requestBody);
//将令牌放入请求header中
request.getHeaders().add("X-Auth-Token",token);
return execution.execute(request, body);
}
}
创建RestTemplate实例的时候可以这样向其中添加*
RestTemplate restTemplate = new RestTemplate();
//向restTemplate中添加自定义的*
restTemplate.getInterceptors().add(new TokenInterceptor());
resttemplate使用指南是什么?
一、引入依赖 要使用RestTemplate,首先需要在项目中引入Spring的相关依赖。确保你的项目中包含了Spring Web的依赖,这样你才能使用RestTemplate类。二、创建RestTemplate实例 在项目中使用RestTemplate之前,需要创建一个RestTemplate实例。你可以通过Spring的IoC容器来创建实例,也可以在代码中直接创建。三、发送HTTP...
RestTemplate入门
RestTemplate是Spring框架提供的核心工具,用于访问RESTful服务,能显著提升开发效率。本文将逐步探索其基本用法,深入细节将在后续内容中展开。1. RestTemplate简介RestTemplate基于HTTP协议,默认使用JDK的HttpUrlConnection,但支持替换为OkHttp或Apache HttpComponents等其他库。它通过HttpMessageConverter进行HTTP消息...
RestTemplate使用(JAVA)
postForEntity()允许指定响应类型。 delete方法:一般不推荐,因为无返回值。 put方法:同delete,无返回值。 exchange方法:是主要推荐的使用方式,允许开发者自定义HTTP请求方法,支持添加body和头信息,返回类型可为泛型,提供更大的灵活性。 excute方法:所有上述方法最终都调用excute方法,实...
精讲RestTemplate第9篇-如何通过HTTP Basic Auth认证
浏览器访问地址:httpbin.org/#...,这个接口服务通过OpenAPI(swagger)实现,方便在线测试。二、请求头方式携带认证信息 通过在HTTP请求头中携带Basic Auth认证的用户名和密码,实现认证。具体实现细节请查看代码注释。成功执行测试用例,证明RestTemplate正确携带了Basic认证信息,并得到响应结果200。三、拦截器...
restTemplate通讯与参数传递
RestTemplate 是 Spring Framework 提供的一个客户端工具,用于访问 RESTful 服务,它简化了与 RESTful 服务的交互,能够发送 HTTP 请求并处理响应结果。它支持多种 HTTP 请求类型,如 GET、POST、PUT、DELETE 等。接下来,我们将探讨 RestTemplate 如何传递不同类型的参数以及处理结果。以下将使用 xxxFor...
RestTemplate 简单使用
它遵循RestFul原则,简化了与HTTP服务的通信过程,程序只需提供URL即可发起请求并获取结果。默认情况下,RestTemplate依赖JDK的HTTP连接工具,但开发者可通过设置`setRequestFactory`属性切换到其他HTTP源,如Apache HttpComponents、Netty或OkHttp。在非Spring环境下使用RestTemplate,首先需引入spring-web包。在单元...
restTemplate通讯与参数传递
RestTemplate 是 Spring Framework 提供的高效工具,用于简化与 RESTful 服务的交互,支持 GET、POST、PUT、DELETE 等常见请求类型。它通过一系列方法如 xxxForObject,方便地进行参数传递和响应结果处理。参数传递与接收在调用远程服务时,RestTemplate 需要先进行注入。以下是不同参数类型下的操作示例:1. ...
SpringBoot 调用外部接口的三种方式
对于基本的HTTP请求,SpringBoot提供了`java.net.HttpURLConnection`或第三方库如Apache HttpClient等,以供开发者直接构建和发送HTTP请求。这种方式适用于对性能有严格要求或需要高度定制化请求的情况。方式二:使用RestTemplate Spring的RestTemplate类提供了方便的HTTP客户端接口,简化了调用RESTful服务的流程。它...
三种方法实现调用Restful接口
1、基本介绍 Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法比较多,本次介绍三种:1)、 HttpURLConnection实现 2)、 HttpClient实现 3)、 Spring的RestTemplate 2、HTTPURLConnection实现 3、HttpClient实现 4、String的RestTemplate实现 springmvc.xml增加 controller ...
精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用
RestTemplate是Spring框架中用于执行HTTP请求的同步阻塞式客户端。它简化了使用底层HTTP客户端库的操作,提供了一种更方便、快捷的访问基于HTTP的Web服务的方式。RestTemplate在Spring 3.0版本引入,适用于RESTful风格设计的Web服务。尽管在Spring 5版本中引入了WebClient作为非阻塞式Reactive HTTP客户端,但...