只接收一個List作為入參的話不報錯,下方為代碼:前臺:$.ajax({
type:"post",
url: 'add',
contentType:"application/json; charset=utf-8",
dataType:"json",
data:JSON.stringify([{id:1,name:"hello"},{id:2,name:"hello"}]),
success:function(data){
console.log(data);
}
})
后臺: @ResponseBody
@RequestMapping(value = "add", consumes = "application/json; charset=utf-8")
public String add(@RequestBody List<Tag> param) {
System.out.println("param:" + param);
return "成功";
}
前臺控制臺顯示的數據格式為:[{id: 1, name: "hello"}, {id: 2, name: "hello"}]0:{id: 1, name: "hello"}1:{id: 2, name: "hello"}
那如果我后臺想接受一個字符串和一個list該怎么寫呢,
后臺代碼改為:@ResponseBody
@RequestMapping(value = "add", consumes = "application/json; charset=utf-8")
public String add(@RequestBody String content, @RequestBody List<Tag> param) {
前臺應該怎么寫?
2 回答

冉冉說
TA貢獻1877條經驗 獲得超1個贊
兩種解決方案
1、
如果參數比較少 直接url?parm=value,
那么就用@RequestParam
注解
2、封裝成對象
class A {
private String parm1;
private String parm2;
private List<B> list;
}
對應的前臺
var data =new Object;
data.param1="value";
data.param2="value";
var list = new Array();
....省略list的數據初始化
data.list = list;
ajax的data
data:JSON.stringify(data)

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
@ResponseBody 接收的是前臺你用 JSON 傳遞過來的一個整體,所以你前臺需要將 String 和 List 封裝在一個對象里面。
var json = {};
json['content'] = content;
json['param'] = [{id: 1, name: "hello"}, {id: 2, name: "hello"}];
// ajax data
data:JSON.stringify(json)
后臺接收的話,建議是寫一個對象來接收比如,
public class SomeModel {
private String content;
private List<Tag> param;
// getter and setter
}
controller
@RequestMapping(value = "add", consumes = "application/json; charset=utf-8")
public String add(@RequestBody SomeModel someModel) {
String content = someModel.getContent();
List<Tag> param = someModel.getParam();
}
或者可以偷懶,用 Map 來接收。
添加回答
舉報
0/150
提交
取消