鍍金池/ 問答/Java  HTML/ java spring項(xiàng)目controller中接收一個(gè)string,和一個(gè)Li

java spring項(xiàng)目controller中接收一個(gè)string,和一個(gè)List為入?yún)?bào)錯(cuò),前端參數(shù)應(yīng)該怎么傳?

只接收一個(gè)List作為入?yún)⒌脑挷粓?bào)錯(cuò),
下方為代碼:
前臺:
$.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 "成功";
}

前臺控制臺顯示的數(shù)據(jù)格式為:
[{id: 1, name: "hello"}, {id: 2, name: "hello"}]
0:{id: 1, name: "hello"}
1:{id: 2, name: "hello"}

那如果我后臺想接受一個(gè)字符串和一個(gè)list該怎么寫呢,

后臺代碼改為:
@ResponseBody

@RequestMapping(value = "add", consumes = "application/json; charset=utf-8")
public String add(@RequestBody String content, @RequestBody List<Tag> param) {

前臺應(yīng)該怎么寫?
回答
編輯回答
硬扛

@ResponseBody 接收的是前臺你用 JSON 傳遞過來的一個(gè)整體,所以你前臺需要將 String 和 List 封裝在一個(gè)對象里面。

var json = {};
json['content'] = content;
json['param'] = [{id: 1, name: "hello"}, {id: 2, name: "hello"}];

// ajax data
data:JSON.stringify(json)

后臺接收的話,建議是寫一個(gè)對象來接收比如,

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 來接收。

2017年8月8日 22:29
編輯回答
涼心人

兩種解決方案
1、
如果參數(shù)比較少 直接url?parm=value,

那么就用@RequestParam注解
2、封裝成對象

    class A {
        private String parm1;
        private String parm2;
        private List<B> list;
    }

對應(yīng)的前臺

var data =new Object;
data.param1="value";
data.param2="value";
var  list =  new Array();
....省略list的數(shù)據(jù)初始化
data.list = list;


ajax的data
 data:JSON.stringify(data)
2018年2月24日 01:45