近期想研究如何通过前端数据封装成对象传到后台,其他方式都通过了,但是希望后台用@RequestBody接收,总是出现如下图的报错:

网上百度了很多,可是大部分讲得比较高大上,也没能解决我的问题,于是我下定决心想把它解决掉。通过百度,也大概得到一个思路:要传JSON字符串、ajax要添加contentType:"application/json; utf-8"。顺着这个思路,果然跑通了。
我用的jackson相关依赖如下:
<!--jackson相关包-->
<!--https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
1、既然要传JSON字符串,那么在前端,要把data数据转成字符串:JSON.stringify(param),下面是我测试的前端js代码(注意看我代码中的注解):
/**
* 后台用@RequestBody接收
*/
function toRequestBody(){
debugger
var param = {};
param.productId=1;
param.productName="hahah";
param.img="test.jsp";
$.ajax({
url:getRootPath()+"/test/getProductList_v2",
//data:param, 这是我原来的代码,是一个Object对象
data:JSON.stringify(param), //修改后的代码
contentType:"application/json; utf-8",//添加的(经过测试,必须有)
type:"post", //好像只能用post提交方式才行,get不行
success:function (result) {
debugger;
console.log(result);
}
})
}
2、在后台的代码如下
/** @Description:
* 用@RequestBody时,要在前端把该数据转成json格式,
* 即转成JSON.stringify(param)传进来
* @Author:wrb
* @Date:2020/1/10/17:25
* @Param
* @return com.baking.util.Msg
*/
@RequestMapping(value = "/getProductList_v2",method=RequestMethod.POST,produces = "application/json; utf-8")
@ResponseBody
public Msg getProductList_v2(@RequestBody Product product){
Msg msg = new Msg();
List<Product> productList = productSerice.getProductList(product);
msg.setCode("0");
msg.setData(productList);
return msg;
}
或者下面的代码:
/** @Description: 或者下面这种方式
* 用@RequestBody时,要在前端把该数据转成json格式,
* 即转成JSON.stringify(param)传进来
* @Author:wrb
* @Date:2020/1/10/17:25
* @Param
* @return com.baking.util.Msg
*/
@RequestMapping(value = "/getProductList_v3")
@ResponseBody
public Msg getProductList_v3(@RequestBody Product product){
System.out.println("getProductList_v3==>"+"product");
Msg msg = new Msg();
List<Product> productList = productSerice.getProductList(product);
msg.setCode("0");
msg.setData(productList);
return msg;
}
3、测试结果分别如下:


解决了!

本文详细介绍了如何解决在使用@RequestBody注解接收前端数据时遇到的问题,通过正确配置前端的JSON.stringify方法和设置contentType为application/json;utf-8,成功实现了前后端的数据交互。
1万+

被折叠的 条评论
为什么被折叠?



