002-06-RestTemplate-请求示例-form、json、multipart、okhttp3
一、概述
请求示例集合
服务端:https://github.com/bjlhx15/common-study.git 中的 http-client-webserver
服务端:RequestBody接收 即为Content-Type:appliaction/json接收
服务端:RequestParam 参数映射
1.1、form表单
请求头:Content-Type:application/x-www-form-urlencoded
请求方式:post
测试:

小结:
参数传递方式一、使用:MultiValueMap<String, String> valueMap = new LinkedMultiValueMap();
参数传递方式二、使用:url传递普通参数、对象接收
直接只使用对象,如没显示设置请求头,会将Content-Type设置为:application/json;
如果显示设置,headers.add("Content-Type","application/x-www-form-urlencoded");
Person person = new Person();
person.setName("test");
person.setAge(23); HttpHeaders headers=new HttpHeaders();
headers.add("Content-Type","application/x-www-form-urlencoded");
HttpEntity entity=new HttpEntity(person,headers);
会出现如下异常
No HttpMessageConverter for [com.github.bjlhx15.common.http.webserver.controller.Person] and content type [application/x-www-form-urlencoded]
1.2、form表单
请求头:Content-Type:application/json
请求方式:post
测试:

小结:
参数传递方式一、使用:对象类型参数,服务端需要RequestBody接收
参数传递方式二、使用:url传递普通参数、对象接收
直接只使用对象,如没显示设置请求头,会将Content-Type默认设置为:application/json;
1.3、multi-part form表单
请求头:Content-Type:multipart/form-data
请求方式:post
测试:

小结:
参数传递方式一、使用:MultiValueMap<String, String> valueMap = new LinkedMultiValueMap<>();可以传递普通参数和文件
参数传递方式二、使用:url传递普通参数、对象接收
@Test
public void uploadFileParam() {
RestTemplate restTemplate2 = new RestTemplate(new SimpleClientHttpRequestFactory());
//设置请求头
HttpHeaders headers1 = new HttpHeaders();
headers1.setContentType(MediaType.MULTIPART_FORM_DATA); MultiValueMap<String, Object> valueMap = new LinkedMultiValueMap<>();
FileSystemResource fileSystemResource = new FileSystemResource(new File("/Users/lihongxu6/IdeaProjects/common-study/common-http/http-client-test/target/test-classes/test.txt"));
valueMap.add("file", fileSystemResource);
valueMap.add("msg", "dddddd");
HttpEntity entity = new HttpEntity(valueMap, headers1); Result result2 = restTemplate2.postForObject("http://localhost:8080/multipart/uploadFileParam", entity, Result.class);
System.out.println(result2);
}
针对特殊服务端可能请求无法接收普通参数,因为传递过程对普通参数增加了Content-Type。
故可以使用okhttp3,如下
@PostMapping("upload")
public WebResult<ImageUploadResult> upload(@RequestParam("img") MultipartFile file) {
final byte[] bytes;
try {
bytes = file.getBytes();
} catch (IOException e) {
log.warn("fail to read file", file.getOriginalFilename(), e);
return new WebResult<>(500, "服务器错误,请稍后再试");
}
//构造请求Body
MultipartBody body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("name", "bjlhx15")
.addFormDataPart("file", bytes))
.build();
//构造请求
Request request = new Request.Builder().url("https://aaa.com/upload")
.post(body)
.build();
OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(sslManager.getSocketFactory())
.build();
//后面的省略了...
}
更换
002-06-RestTemplate-请求示例-form、json、multipart、okhttp3的更多相关文章
- Resttemplate请求失败如何获取返回的json
参考:https://blog.csdn.net/u011974797/article/details/82424004 https://www.cnblogs.com/liumz0323/p/106 ...
- jQuery Ajax: $.post请求示例
jQuery Ajax: $.post请求示例 leyangjun.html页面 <html> <head> <meta http-equiv="Content ...
- C/C++使用libcurl库发送http请求(get和post可以用于请求html信息,也可以请求xml和json等串)
C++要实现http网络连接,需要借助第三方库,libcurl使用起来还是很方便的 环境:win32 + vs2015 如果要在Linux下使用,基本同理 1,下载编译libcurl 下载curl源码 ...
- jquery的ajax异步请求接收返回json数据
http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...
- jquery Ajax请求示例,jquery Ajax基本请求方法示例
jquery Ajax请求示例,jquery Ajax基本请求方法示例 ================================ ©Copyright 蕃薯耀 2018年5月7日 https: ...
- Spring Security 前后端分离登录,非法请求直接返回 JSON
hello 各位小伙伴,国庆节终于过完啦,松哥也回来啦,今天开始咱们继续发干货! 关于 Spring Security,松哥之前发过多篇文章和大家聊聊这个安全框架的使用: 手把手带你入门 Spring ...
- HttpClient之Get请求和Post请求示例
HttpClient之Get请求和Post请求示例 博客分类: Java综合 HttpClient的支持在HTTP/1.1规范中定义的所有的HTTP方法:GET, HEAD, POST, PUT, ...
- 七:Spring Security 前后端分离登录,非法请求直接返回 JSON
Spring Security 前后端分离登录,非法请求直接返回 JSON 解决方案 在 Spring Security 中未获认证的请求默认会重定向到登录页,但是在前后端分离的登录中,这个默认行为则 ...
- Query通过Ajax向PHP服务端发送请求并返回JSON数据
Query通过Ajax向PHP服务端发送请求并返回JSON数据 服务端PHP读取MYSQL数据,并转换成JSON数据,传递给前端Javascript,并操作JSON数据.本文将通过实例演示了jQuer ...
随机推荐
- Django解析器
1.什么是解析器? 对请求的数据进行解析-请求体进行解析.解析器在你不拿请求体数据时,不会被调用. 安装与使用:(官方文档) https://www.django-rest-framework.org ...
- 使用globalData函数设置全局变量
在app.js中设置需要的全局变量的参数,比如公司名称等 //app.js App({ globalData: { title: 'tomatocc' } }) 然后就可以在某个页面的js文件中(比如 ...
- 十六.maven自动化构建protobuf代码依赖
protobuf在序列化和反序列化中的优势: 1):序列化后体积相比Json和XML很小,适合网络传输2):支持跨平台多语言3):消息格式升级和兼容性还不错4):序列化反序列化速度很快,快于Json的 ...
- 使用dos创建一个maven项目
创建一个maven项目既可以使用eclipse创建,也可以使用dos命令,此文介绍使用dos界面创建一个maven项目 1.win+R输入cmd,打开dos界面 2.cd到你想创建项目的目录(默认都是 ...
- RCNN,Fast RCNN,Faster RCNN 的前生今世:(1) Selective Search
Selective Search for Object Recoginition 这篇论文是J.R.R. Uijlings发表在2012 IJCV上的一篇文章,主要介绍了选择性搜索(Selective ...
- Linux 的磁盘格式化、挂载、磁盘检验、df、du、fdisk、free命令的使用
df:列出文件系统的整体磁盘使用量du:检查磁盘空间使用量fdisk:用于磁盘分区 free:查看内存占用情况 一.df命令列出系统的整体磁盘使用量 df命令参数功能:检查文件系统的磁盘空间占用情况. ...
- Ceph osd故障恢复
1 调高osd的日志等级 加上红框那一行就可以了 osd的日志路径:/var/log/ceph/ceph-osd.3.log 注意:加上了这一行后日志会刷很多,所以要特别注意日志容量的变化,以防把v ...
- YII框架的模块化技术
一.模块的创建 利用yii的自动生成工具gii生成模块. 1.访问:lcoalhost/web/index.php?r=gii 2.点击 Module Generator 下面的 start 3.填写 ...
- 服务器上build.xml文件乱码解决(亲测有效)
前提条件:必须root账户登录系统,否则无权限 1. 修改/etc/sysconfig/i18n: 拷贝如下内容到文件中 #LANG="zh_CN.UTF-8" LANG=&quo ...
- Struts2.5入门之环境设置
1. 下载Struts2.5,下载地址 2. 新建项目struts2 3. 解压后将struts\lib下的所有jar包复制到WEB-INF/lib文件夹下 4. 修改web.xml配置文件,添加如下 ...