对Spring 的RestTemplate进行包装
Spring的RestTemplate及大地简化了REST Client的开发,但每次还要编写大量的模板代码,代码不够简洁。我对他进行了一次包装,采用接口来声明REST接口,使用Annotation对interface的方法进行标注。如下声明一个REST接口
//接口必须继承BaseRestClient,提供了一个setUrl的基本方法。
public interface ITestRest extends BaseRestClient
{
//声明一个REST方法,method是GET,在路径里面有个参数id,如: http://localhost:8080/get/{id}。返回一个UserInfo对象,由Json反射过来。
@RestClient(method = HttpMethod.GET)
UserInfo getUser(@PathParam(value = "id") String id);
//声明一个REST方法,method用POST,除了路径里面的id,还有一个表单
@RestClient(method = HttpMethod.POST)
UserInfo postUser(@PathParam(value = "id") String id,@FormBody UserForm form);
//表单中含有文件
@RestClient(method = HttpMethod.POST,hasFile = true)
UserInfo postUserWithFile(@PathParam(value = "id") String id,@FormBody UserFormWithFile form);
}
声明Bean
@Bean
public ITestRest testRest(RestTemplate restTemplate){
ITestRest testRest= RestClientBuilder.newRestClient(ITestRest.class,restTemplate);
return testRest;
}
@Bean
public RestTemplate restTemplate(){
return new RestTemplateBuilder()
.additionalMessageConverters(new MappingJackson2HttpMessageConverter())
.additionalMessageConverters(new FormHttpMessageConverter()).build();
}
调用方
@Autowired
ITestRest testRest;
......
testRest.setUrl("http://localhost:8080/get/{id}");
UserInfo user=testRest.getUser("123456");
由于访问路径可能会变化,比如采用了集群,所以在调用前需要set一下,url放到ThreadLocal里面,线程安全。
如果不变,可以在@RestClient声明中加上path指定访问地址
github地址:https://github.com/bobdeng/ssrf
对Spring 的RestTemplate进行包装的更多相关文章
- Spring’s RestTemplate
Spring’s RestTemplate /** * After the word document is generated in memory we can upload it to the s ...
- SpringBoot+RestTemplate 简单包装
RestTemplate设计是为了Spring更好的请求并解析Restful风格的接口返回值而设计的,通过这个类可以在请求接口时直接解析对应的类. 在SpringBoot中对这个类进行 ...
- spring的RestTemplate使用指南
前言:现在restful接口越来越广泛,而如今很多接口摒弃了传统的配置复杂的webService开发模式,在java领域只需要很简单的springMvc就可以声明为一个控制器,再加上service层, ...
- 还不知道spring的RestTemplate的妙用吗
为什么要使用RestTemplate? 随着微服务的广泛使用,在实际的开发中,客户端代码中调用RESTful接口也越来越常见.在系统的遗留代码中,你可能会看见有一些代码是使用HttpURLConnec ...
- Spring的RestTemplate
Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和反序列化,非常方便.RestTemplate并没有限定Http的客户端类型 ...
- Spring中RestTemplate进行Http调用
Spring中的RestTemplate类源自spring-web,http调用中设置超时时间.设置连接池管理等非常重要,保证了系统的可用性,避免了长时间连接不上或者等待数据返回,拖垮系统. 现贴出工 ...
- Spring中RestTemplate的使用方法
一.REST 在互联网中,我们会通过请求url来对网络上的资源做增删改查等动作,这里的请求包含两部分:动词,主要包括增.删.改.查:名词,就是网络中的各种资源.传统的非REST风格的请求方式是把动词和 ...
- Spring boot ----RestTemplate学习笔记
****spring boot-----restTemplate 封装了HttpURLConnection,HttpClient,Netty等接口访问实现库 restTemplet包含以下部分 Htt ...
- 使用Spring的RestTemplate进行接口调用
引自:http://www.zimug.com/ 1.常见的http服务的通信方式 经常使用的方式有HttpClient.OkHttp.RestTemplate.其中RestTemplate是一种更优 ...
随机推荐
- IMPLEMENTING A GRU/LSTM RNN WITH PYTHON AND THEANO - 学习笔记
catalogue . 引言 . LSTM NETWORKS . LSTM 的变体 . GRUs (Gated Recurrent Units) . IMPLEMENTATION GRUs 0. 引言 ...
- Slow ReadProcessor&Error Slow BlockReceiver错误日志分析(转)
1.总结 "Slow ReadProcessor" 和"Slow BlockReceiver"往往是因为集群负载比较高或者某些节点不健康导致的,本文主要是帮助你 ...
- Error creating bean with name
最近在学一个东西,要使用SSM新建一个案例,是这样滴,我有如下 DeptDAO DeptService DeptServiceImpl DeptController Dept Mybatis 首先,我 ...
- windows上编译zlib-1.2.8
MSVC编译 使用VS(x86)命令行工具进入到zlib根目录,执行 nmake -f win32/Makefile.msc ,在根目录下生成:zlib.lib(静态库) zdll.lib(动态库的 ...
- Visual Studio图形调试器详细使用教程(基于DirectX11)
前言 对于DirectX程序开发者来说,学会使用Visual Studio Graphics Debugger(图形调试器)可以帮助你全面了解渲染管线绑定的资源和运行状态,从而确认问题所在.现在就以我 ...
- Linux 命令详解(十三)如何启动、关闭和设置ubuntu防火墙
sudo ufw enable|disable 由于LInux原始的防火墙工具iptables过于繁琐,所以ubuntu默认提供了一个基于iptable之上的防火墙工具ufw. ubuntu 9.1 ...
- [物理学与PDEs]第5章第6节 弹性静力学方程组的定解问题
5. 6 弹性静力学方程组的定解问题 5. 6. 1 线性弹性静力学方程组 1. 线性弹性静力学方程组 $$\bee\label{5_6_1_le} -\sum_{j,k,l}a_{ijkl}\cf ...
- Flink学习(二)Flink中的时间
摘自Apache Flink官网 最早的streaming 架构是storm的lambda架构 分为三个layer batch layer serving layer speed layer 一.在s ...
- nnet3bin/nnet3-xvector-compute.cc
将特征在xvector神经网络模型中前向传播,并写出输出向量.我们将说话人识别的特定神经网络结构的输出向量或embedding称之为"Xvector".该网络结构包括:帧级别的多个 ...
- nnet3配置中的上下文和chunk(块)大小
Nnet3配置中的上下文和块大小 简介 本页讨论了nnet3配置中关于解码和训练的块大小以及左右上下文的某些术语.这将有助于理解一些脚本.目前,从脚本角度来看,没有任何关于nnet3的"概述 ...