resttemplate怎么上传文件流

resttemplate怎么上传文件流,第1张

定义一个简单的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 = ""

//入参

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/plainMappingJackson2HttpMessageConverter来处理application/jsonMappingJackson2XmlHttpMessageConverter来处理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())

首先我们需要了解一下Spring Cloud,然后再来了解Spring Cloud Alibaba;

源自官方描述:

Spring Cloud为开发人员提供了一些工具用来快速构建分布式系统中的一些常见模式和解决一些常见问题(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、群集状态)。分布式系统的协调导致了很多样板式的代码(很多固定套路的代码),使用Spring Cloud开发人员可以快速建立实现这些模式的服务和应用程序。它们在任何分布式环境中都能很好地运行,包括开发人员自己的笔记本电脑、裸机数据中心和云计算等托管平台;

Spring Cloud为分布式系统开发的典型应用场景提供良好的开箱即用的功能:

Spring Cloud Alibaba是Spring Cloud下的一个子项目,Spring Cloud Alibaba为分布式应用程序开发提供了一站式解决方案,它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序,使用Spring Cloud Alibaba,您只需要添加一些注解和少量配置即可将Spring Cloud应用程序连接到Alibaba的分布式解决方案,并使用Alibaba中间件构建分布式应用程序系统;

Spring Cloud Alibaba 是阿里巴巴开源中间件跟 Spring Cloud 体系的融合:

动力节点的Spring Cloud Alibaba学习教程,将带你深入掌握基于Spring Cloud Alibaba技术栈的微服务开发技术,包括nacos、sentinel、seata、gateway、skywalking等,培举首养独立进行企业微服务项目架构的能力

Spring Cloud Alibaba视频教程

https://www.bilibili.com/video/BV1nK4y

Spring Cloud Alibaba资料下载

http://www.bjpowernode.com/?toutiao

•001.视频导读

•搭答察002.Spring家族产品梳理

•003.What is Spring-Cloud-Alibaba?

•004.Nacos运行环境部署

•005.向Nacos注册中心注册服务

•006.从Nacos发现服务并负载均衡调用

•007.从Nacos发现服务并负载均衡调用

•008.Nacos客户端信息缓存

•009.Nacos客户端信息缓存

•010.Nacos Config配置中心启动读取外部配置

•011.Nacos Config配置中心自动刷新

•012.Nacos Config配置中心yaml配置

•013.Nacos Config配置中心多环境配置

•014.问答交流

•015.内容回顾-配置中心数据模型

•016.配置中心三层结构数据配置隔离

•017.配置中心三层结构数据配置隔离

•018.配置版本回滚-服务注册分组

•019.Nacos管控台用户权限管理

•020.Nacos数据持久化

•021.Nacos数据持久化

•022.Nacos集群环境部署

•023.Nacos集群环境测试

•024.Nacos集群统一入口Nginx

•025.快速回顾

•026.RestTemplate无参数Get调用返回String

•027.RestTemplate无参数Get调用返回User

•028.RestTemplate有参数Get调用返回User

•029.RestTemplate有参数Get调用返回User

•030.RestTemplate有参数Post调用返回User

•031.RestTemplate有参数Post调用返回User

•032.RestTemplate传输User对象参数Post调用知茄返回User

•033.RestTemplate传输JSON参数Post调用返回User

•034.RestTemplate有参数Put调用

•035.RestTemplate有参数Delete调用

•036.RestTemplate方法调用梳理总结

•037.RestTemplate结合Ribbon实现负载均衡

•038.RestTemplate结合Ribbon实现负载均衡

•039.Ribbon负载均衡实现策略

•040.自定义Ribbon负载均衡实现策略

•041.更改Ribbon负载均衡实现策略

•042.Ribbon的核心接口组成

•043.Ribbon负载均衡策略个性化配置

•044.Ribbon结合Nacos实现权重负载均衡策略

•045.Ribbon结合Nacos负载均衡策优先调用同名集群

•046.Ribbon结合Nacos基于版本负载均衡策略

•047.Ribbon结合Nacos基于命名空间负载均衡策略

•048.What is Feign?

•049.Spring Cloud Alibaba基于Feign的远程调用

•050.Spring Cloud Alibaba基于Feign+Ribbon负载均衡远程调用

•051.Spring Cloud Alibaba基于Feign的相关配置

•052.脱离Ribbon的Feign的远程调用

•054.微服务的级联故障服务雪崩

•055.Spring Cloud Alibaba集成Sentinel

•056.Spring Cloud Alibaba基于Sentinel管理后台数据测试

•057.Spring Cloud Alibaba基于Sentinel实现限流

•058.Spring Cloud Alibaba基于Sentinel实现限流自定义返回结果

•059.Spring Cloud Alibaba基于Sentinel实现限流自定义跳转页面

•060.Spring Cloud Alibaba基于Sentinel线程数限流

•061.Spring Cloud Alibaba基于Sentinel资源关联限流

•062.Spring Cloud Alibaba基于Sentinel流控规则和流控效果

•063.问答交流

•064.快速回顾和演示环境预备

•065.Spring Cloud Alibaba Sentinel 服务降级RT

•066.Spring Cloud Alibaba Sentinel 服务降级异常比例和异常数

•067.Spring Cloud Alibaba Sentinel 热点参数规则

•068.Spring Cloud Alibaba Sentinel 热点参数规则小细节

•069.Spring Cloud Alibaba Sentinel 系统保护规则

•070.Spring Cloud Alibaba Sentinel 授权规则

•071.Spring Cloud Alibaba Sentinel Dashboard控制台通信原理

•072.Spring Cloud Alibaba Sentinel 对Controller请求url埋点

•073.Spring Cloud Alibaba Sentinel 手写代码实现埋点

•074.Spring Cloud Alibaba Sentinel 采用注解实现埋点

•075.Spring Cloud Alibaba Sentinel 对RestTemplate流控和熔断

•076.Spring Cloud Alibaba Sentinel 对Feign流控和熔断

•077.问答交流

•078.Sentinel规则持久化-拉模式持久化到本地文件

•079.Sentinel规则持久化-拉模式持久化到本地文件

•080.Sentinel规则持久化-推模式持久化到Nacos

•081.Sentinel规则持久化-推模式持久化到Nacos

•082.Spring Cloud Gateway 网关功能特性

•083.Spring Cloud Gateway 网关搭建

•084.Spring Cloud Gateway 网关服务调用

•085.Spring Cloud Gateway 网关谓词

•086.Spring Cloud Gateway 网关谓词

•087.Spring Cloud Gateway 网关谓词

•088.Spring Cloud Gateway 网关过滤器

•089.Spring Cloud Gateway 问答交流

•090.Spring Cloud Gateway自定义谓词

•091.Spring Cloud Gateway自定义谓词

•092.Spring Cloud Gateway自定义谓词不匹配404页面

•093.Spring Cloud Gateway自定义过滤器

•094.Spring Cloud Gateway全局过滤器

•095.Spring Cloud Gateway自定义全局过滤器

•096.Spring Cloud Gateway集成Ribbon实现负载均衡

•097.Spring Cloud Gateway集成Sentinel限流

•098.Spring Cloud Gateway集成Sentinel限流自定义错误页

•099.Spring Cloud Gateway集成Sentinel规则持久化到文件

•100.Spring Cloud Gateway集成Sentinel规则持久化到Nacos

•101.Spring Cloud Gateway内部执行流程源码分析

•102.Spring Cloud Gateway小结

•103.快速回顾

•104.Spring Cloud Gateway跨域CORS请求

•105.Spring Cloud Gateway跨域CORS请求

•106.What is SkyWalking?

•107.Skywalking运行环境部署

•108.SkyWalking Agent对微服务的链路追踪

•109.SkyWalking Agent对微服务链路追踪

•110.SkyWalking Agent加入IDEA中对微服务链路追踪

•111.SkyWalking 监控告警通知

•112.SkyWalking 监控告警通知

•113.SkyWalking 微服务链路追踪数据持久化MySQL

•114.SkyWalking 问答交流

•115.Skywalking持久化跟踪数据elasticsearch

•116.Skywalking持久化跟踪数据elasticsearch

•117.Skywalking对多个跨服务的链路跟踪

•118.Skywalking对多个跨服务的链路跟踪

•119.Skywalking自定义链路跟踪

•120.Skywalking集成logback输出traceId日志

•121.Skywalking UI界面-仪表盘

•122.Skywalking UI界面-拓扑图-追踪-性能剖析-告警

•123.Skywalking 基于nacos集群

•124.Skywalking 基于nacos集群

•125.Skywalking 基于nacos集群

•126.Skywalking 问答交流

•127.What is Seata?

•128.Seata分布式事务生命周期

•129.Seata TC Server运行环境部署

•130.Seata基于AT事务模式单体应用多数据源分布式事务

•131.Seata基于AT事务模式单体应用多数据源分布式事务

•132.Seata基于AT事务模式单体应用多数据源分布式事务

•133.Seata基于AT事务模式多个微服务分布式事务

•134.Seata基于AT事务模式多个微服务分布式事务

•135.Seata基于AT事务模式多个微服务分布式事务

•136.Seata基于AT事务模式执行机制

•137.Seata AT事务模式

•138.Seata AT事务模式写数据隔离

•139.Seata AT事务模式写数据隔离

•140.Seata AT事务模式读数据隔离

•141.Seata AT事务模式读数据隔离

•142.Seata TC Server集群环境部署

•143.Seata TC Server集群环境部署

•144.Seata TC Server集群环境集成测试

•145.Seata TC Server集群环境集成测试

•146.Seata TCC事务模式的运行机制

•147.Seata TCC事务模式SpringBoot单体应用案例

•148.Seata TCC事务模式SpringBoot单体应用案例

•149.Seata TCC事务模式SpringCloudAlibab微服务应用案例

•150.Seata TCC事务模式SpringCloudAlibab微服务应用案例

•151.What is Spring Cloud Stream

•152.Spring Cloud Stream的核心概念

•153.Spring Cloud Stream集成RocketMQ配置

•154.Spring Cloud Stream集成RocketMQ发送消息

•155.Spring Cloud Stream集成RocketMQ接收消息

•156.Spring Cloud Stream集成RocketMQ监听接收消息

•157.Spring Cloud Stream集成RocketMQ多种发送消息方式

•158.Spring Cloud Stream Starter代码分析

•159.Spring Cloud Stream集成RocketMQ发送事务消息

•160.Spring Cloud Stream集成RocketMQ对象标签消息

•161.Spring Cloud Stream问答交流


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12290717.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存