MVC 接收不到参数? —— 看我如何给你安排得明明白白

news2024/12/30 3:45:18

文章结构

    • 问题背景:
    • 问题处理
    • 总结

问题背景:

现有如下代码:

@PostMapping(value = "/payment/create")
@ResponseBody
public CommonResult create(Payment payment) {

}

乍眼看去是不是很好,至少没啥问题很自然,像大自然一样自然,但是确实是有问题的

问题现象:通过 postman 发送 post 请求,payment 能收到参数;而通过分布式远程调用却接收不到参数,这是为什么呢

问题处理

思路:先看看参数有没有发送过来,其次看看是不是处理参数失败了

1、首先在 DispatcherServlet 类的 doDispatch 方法上打了一个断点,用 Idea 的 debug 窗口执行如下命令:

// 查看 post 请求中 body 数据的
new String(((Http11InputBuffer) ((RequestFacade) request).request.coyoteRequest.inputBuffer).byteBuffer.hb)

很简单读者自行操作一下:查看请求 body 的数据,确认下请求中有没有携带参数

通过查看 http 请求的 body,发现参数数据是有的,也就是说参数有但没有解析到变量 payment 中。问题自然出现在参数解析器上面。继续

2、调查发现postman发送的请求类型是 multipart/form-data 类型,也就是表单提交类型,这种类型一般发生在前端直接提交请求到后台,而分布式调用一般是 contextType=application/json 类型

背景知识:参数解析器(HandlerMethodArgumentResolver)是有顺序的,不同的参数解析器能解析的参数不一样

3、到这里问题大致是定位到了,需要设置正确的contentType类型,接下来就是验证流程

代码写的不对,我们代码针对的是表单形式的 contentType 而分布式环境下发送的是 JSON 形式的 contentType

4、修改代码如下:添加 @RequestBody 注解!!!

@PostMapping(value = "/payment/create")
@ResponseBody
public CommonResult create(@RequestBody Payment payment) {

}

5、参数 payment 成功接收到请求数据

总结

总结:分布式环境下,默认都把 @RequestBody@ResponseBody 注解加上,不给自己找麻烦!!!

传送门: 保姆式Spring5源码解析

欢迎与作者一起交流技术和工作生活

联系作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/591294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于VUE3的一些基础知识点笔记

关于VUE3的一些基础知识点笔记 VUE3 vue2与vue3的一个重要区别是vue2是选项式API(composition API)而vue3是组合式API(option API)。 组合式API就是所有逻辑都在setup函数中,使用ref、watch等函数来组织代码&#xff…

使用HTTP协议在k780网站上获取天气-----天气预报

文章目录 项目介绍一、项目任务二、项目流程规划以及代码实现1.总流程2.引入库3.总体流程相关函数 三、功能函数的实现1. TCP函数2. 输入城市信息3. 查询今天天气4. 查询未来一周天气5. 查询历史天气6. 退出 总结 项目介绍 本期主要使用TCP网络编程实现天气预报的功能&#xff…

基于Html5的在线资料库的设计与实现(asp.NET,SQLServer)

在线资料库系统采用.NET开发平台进行开发,开发工具采用Microsoft Visual Studio 2010集成开发环境,后台编程语言采用C#编程语言来进行编程开发,数据库我们采用当下流行的SQL Server 2008数据库管理系统来存放平台中的数据信息,整个…

【Windows设置篇】字符集-简繁体的切换

【Windows设置篇】字符集-简繁体的切换 微软自带键盘,有次傻啦吧唧的一直找繁体切换简体的方法,进设置里面切换地区,更换地址也不行,后面才发现是在"字符集"里面切换—【蘇小沐】 文章目录 【Windows设置篇】字符集-简…

Maven jar 包下载失败问题处理【配置Maven国内源】

前言 很多同学在Maven里下载一些依赖的时候,即下载【jar 包】的时候总是会出现一些问题,这里专门做一个教程讲解一下 其实这和你的Maven配置是有关系的,因为Maven是一个国际站点,它的仓库是在国外的,所以我们有时候在下…

【C++】函数高级 - 默认参数,占位参数,函数重载基本语法,函数重载注意事项

No.Contents1【C】基础知识 - HelloWorld,注释,变量,常量,关键字,标识符2【C】数据类型 - 整型,sizeof,实型,字符型,转义字符,字符串类型,布尔类型…

chatgpt赋能python:Python中浮点数的定义

Python中浮点数的定义 什么是浮点数? 在计算机科学中,浮点数(floating-point number)是一种用于表示实数的近似值的数值类型。Python中的浮点数是由整数部分和小数部分组成的,可以使用小数点来表示。例如&#xff0c…

考研C语言第七章

7.2函数的声明定义,函数的分类和调用 1、函数声明要在main函数上面,这样main函数才可以进行调用 第一节课主要就学了函数的调用,项目在开发的时候分工用的比较多 主要结构: func.c里面进行函数的定义 不是很重要,进…

IDEA+Mysql+Sqlserver安装步骤_kaic

下载Intellij 开发工具,如果有请检查软件是否过期,如果过期卸载电脑上的Intellij软件。卸载步骤: 打开控制面板,选择卸载程序找到Intellij右键卸载 如果没有请保存文档中的Intellij.zip压缩包,进行安装,安装步骤 双…

查看 HTTP 请求的数据.

文章结构 如果是 GET 请求如果是 POST 请求方法1:DEBUG 窗口(**爽、超级爽、吴迪爽**):方法2:写方法读取流中数据(繁琐,难用): 我们可能会碰到 MVC 拿不到前端的参数&…

何时加索引,性别字段和逻辑删除字段应不应该加

首先哪些地方加索引(按照sql执行顺序写) 1、from表扫描连接处索引 2、where后条件去走索引 3、group by加索引 4、select查询不用加 5、order by排序加索引 (对于第四点,覆盖索引:查询的字段都被索引覆盖,…

chatgpt赋能python:Python中用什么表示空格

Python中用什么表示空格 空格在编程中是一个非常重要的概念,特别是在Python中。Python是一门非常灵活的语言,空格是它语法的一个关键组成部分。今天我们将探讨的是Python中用什么表示空格。 空格是Python中的一个重要概念,它被用来表示代码…

spdk记录

spdk记录 hello_bdev命令行参数 往期文章: spdk环境搭建 hello_bdev 代码路径:examples/bdev/hello_world/hello_bdev.c 可执行文件路径:build/examples/hello_bdev 刚开始直接执行hello_bdev显示找不到Malloc0 ./build/examples/hello_b…

Vue3-devtools开发者工具正确安装方法

目录 前言:1、下载安装2、添加扩展 前言: 最近在学习Vue3,学习Vue3自然离不开调试工具Vue3-Devtools,所以我们需要来下载这个调试工具并放入谷歌浏览器里的扩展程序里面。帮助我们更好的调试vue3里的程序。 1、下载安装 Github下…

【C#图解教程】第四章 类型、存储和变量 学习笔记总结

类型 C#是一组类型声明,这个与第三章:命名空间就是一组类型声明可以一起理解。类型是一个用来创建数据结构的模板: 使用这个模板创建对象的过程叫做实例化,所以创建的对象也叫实例 类型成员 简单类型可能只包含一个数据成员&…

JavaEE HTTPS加密原理

HTTPS加密原理✿✿ヽ(▽)ノ✿ 文章目录 JavaEE & HTTPS加密原理1. 为什么要加密2. HTTPS加密原理2.1 初始想法2.2 引入非对称加密2.3 中间人攻击2.4 引入证书 JavaEE & HTTPS加密原理 1. 为什么要加密 例子:(运营商劫持) 你可能经常…

C语言system()函数

文章目录 C语言system()函数system(“pause”)system(“color num1num2”)system(“cls”)system(“title name”)system(“time /T”) & system(“date /T”) C语言system()函数 头文件&#xff1a; #include<stdlib.h>system(“pause”) 作用&#xff1a;暂停程序进…

AI Canon精选资源清单;带AI功能的PS安装文件与教程;讯飞星火10月对标 ChatGPT;直播换脸工具盘点 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; AI Canon&#xff1a;人工智能精选资源清单 思维导图 ShowMeAI知识星球资源编码&#xff1a;R106 AI Canon 是由美国著名的风投机构 …

【靶场实战】Vulnhub - JANGOW: 1.0.1 靶标实战

靶场地址&#xff1a;https://www.vulnhub.com/entry/jangow-101,754/ 靶场IP&#xff1a;192.168.160.215 信息收集 使用Nmap对目标进行扫描 Nmap -sV -O -p- 192.168.160.215 经过漫长的等待扫描完成&#xff0c;该靶标开启了21、80两个端口&#xff0c;21端口运行服务为f…

chatgpt赋能python:Python中按钮的位置摆放

Python中按钮的位置摆放 在Python应用程序中&#xff0c;按钮是常见的交互元素之一。按钮通常用于响应用户的操作&#xff0c;例如提交表单或执行某些功能。然而&#xff0c;在设计应用程序时&#xff0c;按钮的位置是一个重要的问题&#xff0c;因为它将直接影响用户体验和应…