欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

解读@RequestBody的正确使用方法

程序员文章站 2023-12-11 16:17:58
本文主要研究的是关于@requestbody的正确使用方法的相关内容,具体如下。 最近在接收一个要离职同事的工作,接手的项目是用springboot搭建的,其中看到了这样...

本文主要研究的是关于@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的正确使用方法的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

上一篇:

下一篇: