一、概述

  请求示例集合

服务端: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的更多相关文章

  1. Resttemplate请求失败如何获取返回的json

    参考:https://blog.csdn.net/u011974797/article/details/82424004 https://www.cnblogs.com/liumz0323/p/106 ...

  2. jQuery Ajax: $.post请求示例

    jQuery Ajax: $.post请求示例 leyangjun.html页面 <html> <head> <meta http-equiv="Content ...

  3. C/C++使用libcurl库发送http请求(get和post可以用于请求html信息,也可以请求xml和json等串)

    C++要实现http网络连接,需要借助第三方库,libcurl使用起来还是很方便的 环境:win32 + vs2015 如果要在Linux下使用,基本同理 1,下载编译libcurl 下载curl源码 ...

  4. jquery的ajax异步请求接收返回json数据

    http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...

  5. jquery Ajax请求示例,jquery Ajax基本请求方法示例

    jquery Ajax请求示例,jquery Ajax基本请求方法示例 ================================ ©Copyright 蕃薯耀 2018年5月7日 https: ...

  6. Spring Security 前后端分离登录,非法请求直接返回 JSON

    hello 各位小伙伴,国庆节终于过完啦,松哥也回来啦,今天开始咱们继续发干货! 关于 Spring Security,松哥之前发过多篇文章和大家聊聊这个安全框架的使用: 手把手带你入门 Spring ...

  7. HttpClient之Get请求和Post请求示例

    HttpClient之Get请求和Post请求示例 博客分类: Java综合   HttpClient的支持在HTTP/1.1规范中定义的所有的HTTP方法:GET, HEAD, POST, PUT, ...

  8. 七:Spring Security 前后端分离登录,非法请求直接返回 JSON

    Spring Security 前后端分离登录,非法请求直接返回 JSON 解决方案 在 Spring Security 中未获认证的请求默认会重定向到登录页,但是在前后端分离的登录中,这个默认行为则 ...

  9. Query通过Ajax向PHP服务端发送请求并返回JSON数据

    Query通过Ajax向PHP服务端发送请求并返回JSON数据 服务端PHP读取MYSQL数据,并转换成JSON数据,传递给前端Javascript,并操作JSON数据.本文将通过实例演示了jQuer ...

随机推荐

  1. django-ContentType的简单使用

    ContentType 一般我们有多张表同时外键关联同一张表的时候,可以考虑使用ContentType models.py from django.db import models from djan ...

  2. mysql占用内存过高调优方法

    最近测试一个站点,用mysql 5.6+mencache  内存16GB,但是进行查询的时候还是导致CPU占用过高,达到80%左右,所以想办法如何进行调优.以下几个参数进行参考选择 优化mysql数据 ...

  3. vue slot 插槽详解

    插槽含义:就是引入子组件后,在插入子组件元素中添加信息或者标签,使得子组件的指定位置插入信息或者标签 插槽有三种:默认插槽.具名插槽.作用域插槽,由于vue2.6.0后对插槽进行修改,但是兼容2.6. ...

  4. Vue当中的this

    10事件绑定 methods当中的this就是Vue实例对象vm var vm = new Vue({ el: '#app', data: { num: 0 }, // 注意点: 这里不要忘记加逗号 ...

  5. .net框架-栈(Stack)

    栈(Stack) 栈代表一个后进先出的集合 栈元素为Object类型 .net框架提供Stack<T>泛型栈类 压栈(Push)和出栈(Pop)是栈的基本操作,压栈入栈顶,出栈也出栈顶. ...

  6. 【测试用例工具】TestLink教程:一份完整指南(转)

    转自:https://blog.csdn.net/cjtxzg/article/details/80498226 TestLink教程:一份完整指南1 TestLink的优点 登录到TestLink ...

  7. Idea导入maven项目

    1.idea中有项目的关闭项目  File>>close project  回到截图 下一步>下一步

  8. JS判断移动端访问设备并加载对应CSS样式

    JS判断不同web访问环境,主要针对移动设备,提供相对应的解析方案(判断设备代码直接copy腾讯网的) // 判断是否为移动端运行环境 if(/AppleWebKit.*Mobile/i.test(n ...

  9. Kubernetes 学习3 kubeadm初始化k8s集群

    一.k8s集群 1.k8s整体架构图 2.k8s网络架构图 二.基于kubeadm安装k8s步骤 1.master,nodes:安装kubelet,kubeadm,docker 2.master: k ...

  10. 深入浅出MYSQL数据库—思维导图[附下载链接]

    源文件下载地址:https://github.com/JluTiger/schoolRecruit2020