一、概述

  请求示例集合

服务端: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");

  1. Person person = new Person();
  2. person.setName("test");
  3. person.setAge(23);
  4.  
  5. HttpHeaders headers=new HttpHeaders();
  6. headers.add("Content-Type","application/x-www-form-urlencoded");
  7. HttpEntity entity=new HttpEntity(person,headers);

    会出现如下异常

  1. 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传递普通参数、对象接收

  1. @Test
  2. public void uploadFileParam() {
  3. RestTemplate restTemplate2 = new RestTemplate(new SimpleClientHttpRequestFactory());
  4. //设置请求头
  5. HttpHeaders headers1 = new HttpHeaders();
  6. headers1.setContentType(MediaType.MULTIPART_FORM_DATA);
  7.  
  8. MultiValueMap<String, Object> valueMap = new LinkedMultiValueMap<>();
  9. FileSystemResource fileSystemResource = new FileSystemResource(new File("/Users/lihongxu6/IdeaProjects/common-study/common-http/http-client-test/target/test-classes/test.txt"));
  10. valueMap.add("file", fileSystemResource);
  11. valueMap.add("msg", "dddddd");
  12. HttpEntity entity = new HttpEntity(valueMap, headers1);
  13.  
  14. Result result2 = restTemplate2.postForObject("http://localhost:8080/multipart/uploadFileParam", entity, Result.class);
  15. System.out.println(result2);
  16. }

针对特殊服务端可能请求无法接收普通参数,因为传递过程对普通参数增加了Content-Type。

故可以使用okhttp3,如下

  1. @PostMapping("upload")
  2. public WebResult<ImageUploadResult> upload(@RequestParam("img") MultipartFile file) {
  3. final byte[] bytes;
  4. try {
  5. bytes = file.getBytes();
  6. } catch (IOException e) {
  7. log.warn("fail to read file", file.getOriginalFilename(), e);
  8. return new WebResult<>(500, "服务器错误,请稍后再试");
  9. }
  10.  
  11. //构造请求Body
  12. MultipartBody body = new MultipartBody.Builder()
  13. .setType(MultipartBody.FORM)
  14. .addFormDataPart("name", "bjlhx15")
  15. .addFormDataPart("file", bytes))
  16. .build();
  17.  
  18. //构造请求
  19. Request request = new Request.Builder().url("https://aaa.com/upload")
  20. .post(body)
  21. .build();
  22. OkHttpClient client = new OkHttpClient.Builder()
  23. .sslSocketFactory(sslManager.getSocketFactory())
  24. .build();
  25. //后面的省略了...
  26. }

更换

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. SVM: 实际中使用SVM的一些问题

    使用SVM包来求θ,选择C与核函数 我们使用已经编写好的软件包(这些软件包效率高,用得多,是经无数人证明已经很好的可以使用的软件包)来求θ,而不是自己去编写软件来求它们(就像我们现在很少编写软件来求x ...

  2. vue-cli搭建项目的坑

    使用vue-cli生成的项目默认没有 --open,所以npm run dev运行项目后,不会自动打开浏览器, 需要手动添加--open,反之,如果不需要自动打开浏览器,删除就好了

  3. 常见的meta标签属性

    meta标签是网页元标签.可以定义一些网站的功能. 1. name属性 name属性的通用格式如下: <meta name="xxx" content="xxxx, ...

  4. C# 函数参数中的this

    先看下面的代码: public static class StringExtension { public static void Foo(this string s) { Console.Write ...

  5. 019_Python3 输入和输出

    在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能.本章节我们将具体介绍 Python 的输入输出.   ************************************ 1 ...

  6. CF1097D 【Makoto and a Blackboard】

    我们考虑对于一个\(N\),他如果变成了他的约数\(x\),那又会变成一个子问题 我们定义\(F(n, k)\)为n操作k次的期望个数 那么我们有\(F(n, k) =\sum_{x|n} F(x, ...

  7. 数组思维 -- join的一些用法感悟

    组合字符串的时候, 组合 sql 的时候, 使用join 会非常有用, join  and   记得前端时间去看面试题的时候, 总会出一个小的性能题目, 就是   如果有大量的字符串处理的时候, 怎么 ...

  8. P1378 油滴扩展——搜索小记

    P1378 油滴扩展 记得这道题好久以前(好像是上个学期?) 就想做了,但是看着里面的半径边界好像很难处理就没做(主要是当时刚学OI(菜还给自己找借口)): 今天上午一直研究SG函数,做的都自闭了,晚 ...

  9. CF1163F Indecisive Taxi Fee(线段树+图论)

    做法 这里的修改是暂时的 找到一条最短路径\(E\),需要考虑的是将最短路径上的边增大 每个点考虑与\(1/n\)的最短路径在E上前缀/后缀的位置,设\(L_i,R_i\) 考虑每条边\((u,v)\ ...

  10. 0915 N校联考

    树上路径(phantasm) 题目背景 Akari是一个普通的初中生. 题目描述 Akari的学校的校门前生长着一排n棵树,从西向东依次编号为1∼n.相邻两棵树间的距离都是1.Akari上课的教学楼恰 ...