对Spring 的RestTemplate进行包装
Spring 进行 包装 RestTemplate
2023-09-27 14:20:56 时间
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 AOP expose-proxy
- Spring容器的事件监听机制(简单明了的介绍)
- Spring MVC+Mybatis 执行存储过程,使用Map进行参数的传递
- springboot + websocket + spring-messaging实现服务器向浏览器广播式
- Spring MVC中用@ResponseBody转json,对json进行处理方法汇总
- Spring Boot 集成JUnit5进行测试 Error creating bean with name 'serverEndpointExporter' defined in class path resource
- springBoot 入门(六)—— 整合Spring框架开启自带的任务调度器执行任务(注解方式)
- java spring 框架学习
- 【Kubernetes】构建 Spring boot 测试镜像
- Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理
- Spring Cloud Eureka 使用 IP 地址进行服务注册
- 浅谈使用spring security中的BCryptPasswordEncoder方法对密码进行加密与密码匹配
- Spring Cloud中关于Feign的常见问题总结
- j_spring_security_check 404错误
- Spring整合Junit框架进行单元测试Demo
- spring 配置 线程池并使用 springtest 进行测试
- Spring Cloud Gateway 服务网关的部署与使用详细教程
- Spring进行TestNG测试中无法插入、删除数据库数据(access)的解决
- tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南(含nginx/https支持)
- SpringBoot2.x系列教程(五十)Spring Boot Idea中热部署(自动刷新)
- 【Spring Cloud Alibaba】(五)Dubbo启动报错?一直重连报错?你值得学习的是排查问题的方法