IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> http协议的Request Payload 和 Form Data 的区别 -> 正文阅读

[网络协议]http协议的Request Payload 和 Form Data 的区别

问题描述:

今天在写单元测试的时候,发现controller 方法中一直接收不到我的参数信息

1.post 方法 2.方法体没有用@RequestBody 接受参数

controller里面的方法

    @ResponseBody
    @PostMapping("list")
    public JsonResult login(WearUserInfo wear){
        System.out.println(wear);
        JsonResult login = loginService.login(wear);
        return login;
    }

单元测试里面的方法: conent-type:application/json? ?数据:json格式

 String responseString = mockMvc.perform( post("/login")
.contentType(MediaType.APPLICATION_JSON)
.content(JSONObject.toJSONString(userInfo))).andDo(print())
                .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); 

一直接收不到参数, user一直未null ,我就去看页面请求,就发现问题了?

问题: 我在看页面请求的时候,发现?

????????????????????????请求正文是: Form Data

? ? ? ? ? ? ? ? ? ? ? ?Content-Type: application/x-www-form-urlencoded

?

?

?问题原因:

Http post请求:

Content-Type: application/json

?

后台处理:

?对于 Request Payload 请求, 必须加?@RequestBody?才能将请求正文解析到对应的 bean 中,且只能通过?request.getReader()?来获取请求正文内容

Content-Type: application/x-www-form-urlencoded?

Form Data?:?传统的Form表单提交

请求头部的?Content-Type: application/x-www-form-urlencoded

请求正文是类似 get 请求 url 的请求参数

?

后台处理:

对于 Form Data 请求,无需任何注解,springmvc 会自动使用 MessageConverter 将请求参数解析到对应的 bean,且通过?request.getParameter(...)?能获取请求参数

问题解决:

修改我们的单元测试:??

类型修改为:application/x-www-form-urlencoded?

参数封装为: name=zhangsna&id=1? 的格式

就可以了,controller里面也能正常接收参数了

end

附上对象转换为 url参数格式的方法: 如果有不正确的欢迎指出奥!!?

public static String urlAppendFiled(Object o){
        //1.获取对象的私有属性
        Class<?> aClass = o.getClass();
        Field[] declaredFields = aClass.getDeclaredFields();
        StringBuffer buffer  = new StringBuffer();
       try {
           for(Field field:declaredFields){
               //2.获取属性值,如果值不为空的话进行拼接
               field.setAccessible(true); //属性是私有的,如果要获取值,就要设置setAccessible
               Object filedValue = field.get(o);
               if(filedValue!= null){
                   buffer.append("&").append(field.getName()).append("=").append(filedValue);
               }
           }
       }catch (Exception e){
           e.printStackTrace();
       }
       buffer.delete(0,1);
        return buffer.toString();
    }

发现自己其实对 http协议 了解的还是不够深入,准备接下来深入了解一下

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:49:22  更:2022-03-03 16:50:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:27:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码