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 ...
随机推荐
- 【转】以Python为例的Async / Await的编程基础
转, 原文:https://www.cnblogs.com/middleware/p/11996731.html 以Python为例的Async / Await的编程基础 -------------- ...
- (java)Jsoup爬虫学习--获取网页所有的图片,链接和其他信息,并检查url和文本信息
Jsoup爬虫学习--获取网页所有的图片,链接和其他信息,并检查url和文本信息 此例将页面图片和url全部输出,重点不太明确,可根据自己的需要输出和截取: import org.jsoup.Jsou ...
- Linux安装版本solr-5.3.0
准备材料:solr-5.3.0.tgz 下载路径:http://mirrors.hust.edu.cn/apache/lucene/solr/ 安装solr 1.解压solr [root@svn-se ...
- 02_SAE中创建数据表
Step1:进入新浪云应用数据库点击应用名称,进入到该应用管理界面,在数据库服务中点击“共享型MySQL”: 开启MySQL服务,使用PHPMyAdmin管理数据库,进入MySQL数据库管理界面: S ...
- 使用状态文件+vigil 监控系统状态
vigil 是一个不错的系统可用性报告系统,具有还不错的ui 界面,同时也有通知配置,以下是一个简单的 demo 使用状态文件,以及http body 匹配的模式进行web 应用状态的监控,只是简单的 ...
- WAMP 403 Forbidden禁止访问,别的电脑访问不了;
直接上图: 1:修改httpd.conf; deny from all 改成------ allow from all 重启服务就好了: 2:如果搜不到deny from all 就按照下面的方法来 ...
- C宏定义和使用
#include <stdio.h> #include "head.h" #define TRUE 1 #define FALSE 0 #if defined (TRU ...
- Processing玩抠图
突然兴起想玩一下抠图,试着用自带的Example\video来改,花了一个中午做了个小样: 分别是白色为底与黑色为底的效果,代码如下: import processing.video.*; int n ...
- 在Xilinx ISE中生成ROM时需要注意的事
在Xilinx ISE中生成ROM时,需要指定.coe文件.需要做到两件事.其一,要使用memory_initialization_radix= ; memory_initializatoin_vec ...
- shell脚本编程之条件判断
条件测试类型: 整数测试 字符测试 文件测试 条件测试的表达式的三种方法: 1.[ expression ] 命令测试 2.[[ expression ]] 关键字测试 3.test expressi ...