首先上配置,由于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. MySQL之Web乱码问题

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  2. Python学习笔记调式之抛出异常

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  3. 打卡node day06 ---登录和注册接口

    1, nodemon 自动更新代码 npm i -g nodemon 启动: nodemon server.js 2,注册接口 1)目录结构 2)server.js const express = r ...

  4. Vue基础 · 组件的使用(4)

    组件 将公用的功能抽离出来,形成组件:目的:复用代码. 1.1 全局组件 <div id="app"> <!--引用组件,可多次引用--> <demo ...

  5. 树莓派4B使用花生壳phtunnel内网穿透访问本地Gogs

    已经搭建好Gogs(https://www.cnblogs.com/congyinew/p/16115074.html),接下来就是想外网上传代码到Gogs 一.申请账号 https://open.o ...

  6. vue中,解决chrome下,的warning, Added non-passive event listener to a scroll-blocking ‘mousewheel‘ event 问题

    写项目的时候,Chrome 提醒: [Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' eve ...

  7. Vue全局方法配置

    在Vue项目开发中,肯定会有这样一个场景:在不同的组件页面用到同样的方法,比如格式化时间,文件下载,对象深拷贝,返回数据类型,复制文本等等.这时候我们就需要把常用函数抽离出来,提供给全局使用.那如何才 ...

  8. CSS3滤镜属性filter让网页变黑白

    很多特殊的时候,我们向英雄们致敬,在互联网上最常见的方式就是整个网页变黑白,今天逛某博客收集一段代码,用于网页整体变黑白,用css3滤镜属性filter让网页马上变黑白,一行代码就搞定. 在你的css ...

  9. Dashboard是什么意思 Dashboard怎么用?

    Dashboard是什么意思?Dashboard怎么用?可能很多Mac用户朋友都不知道,Dashboard是苹果OS X操作系统的一大特色.是随苹果公司 Mac OS X 10.4 Tiger 操作系 ...

  10. c语言中位运算符及用法 异或

    a&b:  00000000 00000000   a&b=0x0 a|b : 00000000 01011111   a|b=0x5f a^b : 00000000 01011111 ...