java request body内容_解读@RequestBody的正确使用方法
本文主要研究的是关于@RequestBody的正确使用方法的相关内容,具体如下。
最近在接收一个要离职同事的工作,接手的项目是用SpringBoot搭建的,其中看到了这样的写法:
@RequestMapping("doThis")
public String doThis(HttpServletRequest request,
@RequestParam("id") Long id, // 用户ID
@RequestParam("back_url") String back_url, // 回调地址
@RequestBody TestEntity json_data // json数据,对于java实体类
){//...
这个是一个请求映射方法,然后用浏览器输入url:http://127.0.0.1:8080/test/doThis?id=1&back_url=url&json_data={"code":2,"message":"test"}
在这个方法中,使用@RequestParam获取参数,然后使用@RequestBody对json格式的参数转换为Java类型
在运行的时候发现报错:Required request body is missing
@RequestBody的使用需要加载MappingJackson2HttpMessageConverter,但是SpringBoot的官方文档提到,这个是默认已经加载的了,而且json字符串和javabean也没有书写的错误
因此考虑到应该是请求Content-Type的问题,因为使用浏览器输入url的方式没有办法定义Content-Type,因此spring无法发现request body
为了证实这个想法,自己书写一个请求类:
String add_url = "http://127.0.0.1:8080/test/doThis";
URL url = new URL(add_url);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type","application/json");
connection.connect();
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
JSONObject obj = new JSONObject();
obj.put("code", -1002);
obj.put("message", "msg");
out.writeBytes(obj.toString());
out.flush();
out.close();
请求还是失败,经过调试,发现需要去掉所有的@RequestParam注解才能成功
总结
1、@RequestBody需要把所有请求参数作为json解析,因此,不能包含key=value这样的写法在请求url中,所有的请求参数都是一个json
2、直接通过浏览器输入url时,@RequestBody获取不到json对象,需要用java编程或者基于ajax的方法请求,将Content-Type设置为application/json
以上就是本文关于解读@RequestBody的正确使用方法的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
java request body内容_解读@RequestBody的正确使用方法相关推荐
- SpringBoot 中 @RequestBody的正确使用方法
SpringBoot 中 @RequestBody的正确使用方法 最近在接收一个要离职同事的工作,接手的项目是用SpringBoot搭建的,其中看到了这样的写法: [java] view plain ...
- java request获取内容_JavaWeb - Http请求消息 - Request获取请求消息(基础)代码演示 - 小黑电脑...
Http 概念:Hyper Text Transfer Protocol 超文本传输协议 传输协议 : 定义了,客户端和服务器端通信时,发送数据的格式 特点: 基于TCP/IP的高级协议 默认端口号: ...
- mybatis是什么_为什么SpringMVC可以正确解析方法参数名称,但MyBatis却不行?
对Java字节码有一定了解的朋友应该知道,Java 在编译的时候,默认不会保留方法参数名,因此我们无法在运行时获取参数名称.但是在使用 SpringMVC 的时候,我发现一个奇怪的现象:当我们需要接收 ...
- 安全绳使用方法图解_安全绳的正确使用方法、使用注意事项及应用
安全绳是一种用于连接安全带的辅助用绳,它是由合成纤维编织而成的,具有二重保护的作用,可以确保人在高空作业时的安全.安全绳的种类很多,每种不同的安全绳作用也是不一样的,今天小编就来为大家介绍一下安全绳的 ...
- java request 处理过程_小猿圈Java开发之从代码看spring mvc请求处理过程
原标题:小猿圈Java开发之从代码看spring mvc请求处理过程 Java作为编程界的常青树,有自己生存的独到之处,小猿圈java讲师今天就分享一个关于从代码看spring mvc请求处理过程,通 ...
- java 删除二进制内容_二进制搜索树节点删除不删除替换Java
我试图从二进制搜索树中删除节点.除了一个特定的情况,我可以成功删除树上的任何其他节点.如果目标节点有2个子节点,并且左子节点具有右子树,我可以找到正确的替换节点并将值切换到目标节点,但是永远不会删除替 ...
- java 复制文本内容_基于java文本复制的7种方式总结
如下所示: package copy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...
- java 修改文件内容_用Java修改现有文件内容
小编典典 如对类似问题的公认答案中所建议: 同时以写入模式打开一个临时文件,对于每一行,读取它,必要时进行修改,然后写入该临时文件.最后,删除原始文件并重命名临时文件. 根据您的实现,类似于以下内容: ...
- java数据类型代表价格_解读Java数据及数据类型内幕
(2)字符型 计算机除了处理数值数据,还要处理字符数据.Java语言提供了一种char数据类型,用于字符数据.char类型占2个字节的存储空间,该类型可以存储英文字符,也可以存储单个汉字. char型 ...
最新文章
- 天池NLP中文预训练模型赛来了!
- 七自由度车辆稳定性数学模型和simulink求解
- springboot-springmvc请求参数获取与原理【长文预警,收藏慢啃】
- JZOJ__Day 9:【普及模拟】算法学习(sfxx)
- 推荐系统(工程方向)-策略平台
- javascript日历插件
- 机器学习之--数据构造,函数图显示
- .NET Core 3.0中的Cookie身份验证
- 17APLab4:图标、菜单、加速键、消息框 python
- python安装后如何使用-python运行环境,python安装后如何使用
- windows 2008R2鼠标移动到任务栏一直是漏斗状态
- JSPServlet相关
- [LeetCode] Best Time to Buy and Sell Stock
- 基于物联网平台开发手机混合 App
- 解决edge浏览器中idm插件不能自动捕捉下载链接的问题
- TCP 三次握手 四次挥手 tcpdump Flags
- swiper(轮播图)基本使用
- 开源免费的私有聊天软件 Akaxin
- 各种距离 欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准欧氏距离、马氏距离、余弦距离、汉明距离、杰拉德距离、相关距离、信息熵...
- 使用python爬取网站数据并写入到excel中