首先上配置,由于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. C++ Error:C2011: 'struct' type redefinition

    C++ Error:C2011: 'struct' type redefinition        在c语言中,对同一个变量或者函数进行多次声明是不会报错的.所以如果h文件里只是进行了声明工作,即使 ...

  2. Flink Application Development DataStream API Operators Overview-- Flink应用程序开发DataStream API操作符概览

    目录 概览 DataStream转换 物理分区 任务链和资源组 翻译原文- Application Development DataStream API Operators 概览 操作符将一个或多个D ...

  3. 简述47种Shader Map的渲染原理与制作方法

    https://mp.weixin.qq.com/s/6EVpmgC53HqklIVkIpEssg

  4. cc1

    基础 cc接口及类介绍 Transformer接口 Defines a functor interface implemented by classes that transform one obje ...

  5. git添加github和gitee多个git地址管理

    1.git init //初始化当前的git地址 2.git remote add github github.com //git remote add git标识 git地址 3.git pull ...

  6. MySQL的MDL锁

    MDL锁的概念和分类 1.MDL类型 锁名称 锁类型 说明 适用语句 MDL_INTENTION_EXCLUSIVE 共享锁 意向锁,锁住一个范围 任何语句都会获取MDL意向锁, 然后再获取更强级别的 ...

  7. imputation文献-A systematic evaluation of single-cell RNA-sequencing imputation methods

    文章题目 A systematic evaluation of single-cell RNA-sequencing imputation methods 中文名: 单细胞RNA测序插补方法的系统评价 ...

  8. 常见DOS命令及应用

    常见DOS命令使用 CMD打开方式 开始 + 系统 + 命令提示符 WIN键 + R 输入cmd + Enter WIN键 + R 输入cmd + Ctrl + Shift + Enter (管理员模 ...

  9. Mybatis实现树状结构查询

    1.实体类 @Data public class CourseChapterVO implements Serializable { private static final long serialV ...

  10. CSS3-background-image渐变

    实现效果如下: 观察发现鼠标放上去的时候出现了三个变化,渐变背景,文字位移和图片放大. 渐变背景:background-image: linear-gradient(transparent,rgba( ...