首先上配置,由于restTemplate不支持一些返回格式,所以需要自己手动配置

/**
* @Description : restTemplate配置类
* @Author : wzkris
* @Version : V1.0.0
* @Date : 2022/12/1 10:02
*/
@Configuration
public class RestTemplateConfig { @Bean
public RestTemplate restTemplate() {
OkHttp3ClientHttpRequestFactory factory = new OkHttp3ClientHttpRequestFactory();
factory.setReadTimeout(3000);
factory.setConnectTimeout(3000);
RestTemplate restTemplate = new RestTemplate(factory);
//增强转换器
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
//设置编码
jackson2HttpMessageConverter.setDefaultCharset(StandardCharsets.UTF_8);
jackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(
MediaType.TEXT_HTML,
MediaType.TEXT_PLAIN,
MediaType.APPLICATION_OCTET_STREAM,
MediaType.APPLICATION_JSON,
MediaType.MULTIPART_FORM_DATA,
MediaType.APPLICATION_XML));
setMessageConverter(restTemplate, jackson2HttpMessageConverter);
return restTemplate;
} /**
* 设置消息转换器
*/
private void setMessageConverter(RestTemplate restTemplate, MappingJackson2HttpMessageConverter httpMessageConverter) {
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator();
while (iterator.hasNext()) {
HttpMessageConverter<?> messageConverter = iterator.next();
if (messageConverter instanceof MappingJackson2HttpMessageConverter) {
iterator.remove();
break;
}
}
messageConverters.add(httpMessageConverter);
} }

用法懒得写,是个人都会,举个例子,下面的是我用restTemplate对接微信公众号的上传图片接口,可以看到传递的参数是图片,还需要设置请求头什么的,这个栗子都给出来了用法。

要注意的是,图片参数要用FileSystemResource来设置,而接口上接收文件的是MulltipartFile类型的参数,所以这里就会生成临时的file文件,等上传完毕再删掉即可

/**
* 上传图片素材
*
* @param accessToken token
* @param multipartFile 图片
* @return {
* "url": "http://mmbiz.qpic.cn/mmbiz/gLO17UPRQ/0"
* }
*/
public JSONObject uploadImage(String accessToken, MultipartFile multipartFile) {
String url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=" + accessToken;
//设置请求体,注意是LinkedMultiValueMap
MultiValueMap<String, Object> data = new LinkedMultiValueMap<>();
String path = GtConfig.getUploadPath() + multipartFile.getOriginalFilename();
File file = new File(path);
try {
multipartFile.transferTo(file);
} catch (IOException e) {
throw new ServiceException(e.getMessage());
}
FileSystemResource media = new FileSystemResource(file);
//设置上传文件
data.add("media", media);
//上传文件,设置请求头
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
httpHeaders.setContentLength(multipartFile.getSize());
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(data, httpHeaders);
//上传
JSONObject jsonObject = restTemplate.postForObject(url, requestEntity, JSONObject.class);
//然后删除临时文件
file.delete();
return jsonObject;
}

然后测试,查看返回

spring下的restTemplate使用的更多相关文章

  1. Spring WebClient vs. RestTemplate

    1. 简介 本教程中,我们将对比 Spring 的两种 Web 客户端实现 -- RestTemplate 和 Spring 5 中全新的 Reactive 替代方案 WebClient. 2. 阻塞 ...

  2. 在Spring下集成ActiveMQ

    1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...

  3. 单元测试之获取Spring下所有Bean

    单元测试中,针对接口的测试是必须的,但是如何非常方便的获取Spring注册的Bean呢? 如果可以获取所有的Bean,这样就可以将这个方法放到基类中,方便后面所有单元测试类的使用,具体实现如下: im ...

  4. 任务调度--spring下的任务调度quartz

    之前写过Timer实现任务调度,这篇文章用来写一下在spring下使用quartz实现任务调度,直接上代码: 定义任务对象: package com; /** * 1. 定义任务对象 * * @aut ...

  5. 【Hibernate学习笔记-3】在Spring下整合Hibernate时, 关于sessionFactory的类型的说明

    摘要 在Spring下整合Hibernate时,关于sessionFactory的配置方式主要有两种,分别为注解配置方式,和xml配置方式,下面将对这两种配置方式进行介绍. 1. sessionFac ...

  6. 使用 Spring 提供的 restTemplate 完成 Http 服务消费

    RestTemplate 介绍 RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程 Http 服务的方法,能够大大提高 ...

  7. Spring下使用Redis

    在Spring中使用Redis使用使用两个依赖包jedis.jar.spring-data-redis.jar 一下是Maven项目pom.xml添加依赖 <!--jedis.jar --> ...

  8. Spring下的@Order和@Primary与javax.annotation-api下@Priority【Spring4.1后】等方法控制多实现的依赖注入(转)

    @Order 可以作用在类.方法.属性. 影响加载顺序. 若不加,spring的加载顺序是随机的. @Primary 当注入bean冲突时,以@Primary定义的为准. @Order是控制配置类的加 ...

  9. Spring下面的@Transactional注解的讲解

    摘自: https://www.cnblogs.com/xiohao/p/4808088.html Spring下面的@Transactional注解标志的讲解 最近在开发中对Spring中的事务标记 ...

  10. [转载]Spring下IOC容器和DI(依赖注入) @Bean及@Autowired

    Spring下IOC容器和DI(依赖注入) @Bean及@Autowired自动装配 bean是什么 bean在spring中可以理解为一个对象.理解这个对象需要换一种角度,即可将spring看做一门 ...

随机推荐

  1. 【笔记】DDD实战课-人保架构欧创新

    目录 开篇 学好DDD,你能做什么? 基础 领域驱动设计:微服务设计为什么要选择 DDD? DDD的两层设计 DDD与微服务的关系 领域.子域.核心域.通用域和支撑域:傻傻分不清? 领域和子域 核心域 ...

  2. java & spring 注解 备忘

    java deprecated 注解 1 /** 2 * General service for all common business logic. 3 * 4 * @author wanghaip ...

  3. JMETHOD

    #include <iostream> #define JMETHOD(type,methodname,arglist) type (*methodname) arglist JMETHO ...

  4. Consul 服务注册与发现

    Consul是一种分布式,高度可用且具有数据中心感知能力的解决方案,用于跨动态,分布式基础架构连接和配置应用程序. 1.下载consul.exe 2.在consul.exe文件夹地址栏输入cmd 3. ...

  5. 【剑指Offer】【链表】反转链表

    题目:输入一个链表,反转链表后,输出新链表的表头. A:定义3个结点,pNode作移动指针,pRet作输出指针,pPrev作前驱指针    在pNode没有到达链尾之前,循环里创建pNext指针记录p ...

  6. [419] C1 Harbingers Of War OpCodez

    [419] C1 Harbingers Of War Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 Request ...

  7. RStudio中有常用的快捷键

    1.常用快捷键 转自:https://blog.csdn.net/swuteresa/article/details/8649067 2.RStudio中如何撤销上一步操作: 一般运行过的程序都会在H ...

  8. sourceTree工具使用方法

    https://www.cnblogs.com/tian-xie/p/6264104.html

  9. cpu主频对网络传输性能的影响

    数据包长度是:2KB iperf的测试结果:3.2GHz的cpu能上40Gb/s, 2.1GHz的cpu只能到28Gb/s.

  10. xmake构建C/C++编译环境

    1. xmake介绍 XMake是一个基于Lua的轻量级跨平台自动构建工具,支持在各种主流平台上构建项目 xmake的目标是开发者更加关注于项目本身开发,简化项目的描述和构建,并且提供平台无关性,使得 ...