1.@RequestParam等同于request.getParameter的获取方式相同,主要处理默认的application/x-www-form-urlencoded提交的类型数据,是一个对象。@RequestParam接受的是一个对象,如果和fastjosn.jar中的JSONObject使用就会报错(但是如果将JSONObject.paresObject一个具体的实体类就不会出错了)。
(1)前端代码(用过ajax来测试),可以正常操作
console.log("json对象");
var jsonobject = {"jsonobject":"测试josn对象的上传!"};
$.ajax({
url:"http://localhost:8099/ajaxjsonobject",
type:"POST",
data:jsonobject,
success:function(result)
{
console.log(result);
}
});
(2)前端代码(通过vue的axios来进行测试),运行不正常,需要通过qs模块进行URL序列化,才能获取对象。
(2.1)先下载:npm install qs --save 然后引入qs模块 import qs from "qs";
var josnobject = {"jsonobject":"json对象上传!","jsonobject2":"jsond对象上传2!"};
var jsonobj = this.qs.stringify(josnobject);
this.$axios({
method:"post",
url:"http://localhost:8099/ajaxjsonobject",
data:jsonobj
}).then(result=>{
console.log(result)
});
(3)后端代码
@RequestMapping("/ajaxjsonobject")
@ResponseBody
public void ajaxjsonobject(@RequestParam Map<String,Object> params)
{
String jsonobject = "jsonobject";
String mapjsonobject = (String) params.get("jsonobject");
System.out.println("获取对象jsonobject的值:"+mapjsonobject);
for (String key:params.keySet()) {
for (Object val:params.values()) {
System.out.println(key+":"+val);
}
}
}
2.@RequestBody使用接受的是一个字符串,所以前端得将数据进行JSON.stringify(jsonobject)转换,将转换的数据进行上传,@RequestBody JSONObject jsonobject就能通过getString方法就能直接获取前端传来的字符串数据格式。当然如果是ajax需要加入json字符串的类型,contentType:"application/json"。
(1)前端代码
var josnstringtest = {"jsonstring":"测试字符串上传!"}
var josnstring = JSON.stringify(josnstringtest);//字串转换
console.log(typeof(josnstring));
$.ajax({
url:"http://localhost:8099/ajaxjsonstring",
type:"POST",
//这是提交一个字符串格式。如果不写类型,则默认提交application/x-www-form-urlencoded格式数据
contentType:"application/json",
data:josnstring, //josnstringtest josnstring
success:function(result){
console.log(result);
}
});
(2)前端代码(通过vue的axios来进行测试),可以正常操作,axios本身就是json字符串格式。
console.log("json字符串测试!");
//axios本身就对对象进json字符串的处理
var josnstringtest = {"jsonstring":"测试字符串上传!","jsonstring2":"测试字符串上传2!"};
this.$axios({
method:"post",
url:"http://localhost:8099/ajaxjsonstring",
data:josnstringtest
}).then((result)=>{
console.log(result);
});
(3)后端代码
@RequestMapping("/ajaxjsonstring")
@ResponseBody
public void ajaxjosnstring(@RequestBody JSONObject jsonObject)
{
//可以直接获取前端转换好的json字符串数据格式
String jsonstring = jsonObject.getString("jsonstring");
System.out.println(jsonstring);
}