springboot 傳List參數


最近項目有個需求,前台需要傳list參數請求controller接口,一開始直接使用ResponseBody注解,但實踐下來發現參數沒有傳到controller。
現將處理方式記錄如下:
 1、前台
將list參數轉換為json字符串: JSON.stringify(list)
 var list=[];

 list.push({

      "id":1,

      "type":2,                  

  });

 list.push({

      "id":2,

      "type":3,                  

  });
this.$http.post("/demo/testListParam",{"jsonStr":JSON.stringify(list),"id":parseInt(this.id),"reason":this.reason} , {

            }).then(res => {

              if (res.resultCode == 200 ) {

                console.log("data:"+res.data);

               

              } else {

                setTimeout(() => {

                  this.instance("error", "提示",  res.message);

                }, 500);

              }

            });

2、controller

通過String拿到json字符串,再將json字符串轉為List.

StAdjust類有字段id、reason

@RequestMapping(value = "/demo/testListParam", method = RequestMethod.POST)
@ResponseBody
public ResponseVO<Map<String,Object>> test(StAdjust stAdjust, @RequestParam("jsonStr")String listJSON) {
   
    List<Demo> demoList = JSON.parseArray(listJSON,Demo.class);
 
 }

 






SpringBoot前端給后端傳list

var taskList = ["123","456"];
var params = {
    taskList: taskList
};

$.ajax({
    type: "PUT",
    dataType: "json",
    url: "/client/update",
    data: params,
    success: function (msg) {
    }
});
1 @RequestMapping(value = "/update", method = RequestMethod.PUT)
2 @ResponseBody
3 public JSONResult updateClient(Client client, @RequestParam(value = "taskList[]") List<String> taskList) {
4     logger.debug("Yufan taskList={}", taskList);
5     return JSONResult.ok();
6 }

 

 








發送的參數Json數據:

{"id":1,

 "shiftDetails":[{"id":1,"lineId":2}],

 "broadcasts":[{"id":1,"lineId":1,"imgPath":"TEST1"}, 

               {"id":2,"lineId":2,"imgPath":"TEST2"}]

}

Controller類:

@Controller

@RequestMapping("/travelLine")

 

public class TravelLineController {

 

    @RequestMapping("/insertTest")

    @ResponseBody

    public Json insertTest(@RequestBody TravelLineDomain tl) {

        Json j = new Json();

        j.setData(tl);

        return j;

    }

 

}

TravelLineDomain實體類:

@Table(name = "t_travel_line")

public class TravelLineDomain{

 

    @Id

    @GeneratedValue(generator = "JDBC")

    private Integer id;

 

    private List<ShiftDetailDomain> shiftDetails;

    

    private List<BroadcastDomain> Broadcasts;

 

    public Integer getId() {

        return id;

    }

 

    public void setId(Integer id) {

        this.id = id;

    }

 

    public List<ShiftDetailDomain> getShiftDetails() {

        return shiftDetails;

    }

 

    public void setShiftDetails(List<ShiftDetailDomain> shiftDetails) {

        this.shiftDetails = shiftDetails;

    }

 

    public List<BroadcastDomain> getBroadcasts() {

        return Broadcasts;

    }

 

    public void setBroadcasts(List<BroadcastDomain> broadcasts) {

        Broadcasts = broadcasts;

    }

 

}

 






springMVC通過ajax傳遞參數list對象或傳遞數組對象到后台

springMVC通過ajax傳遞參數list對象或傳遞數組對象到后台
 
環境:
前台傳遞參數到后台
前台使用ajax
后台使用springMVC
傳遞的參數是N多個對象
 
JSON對象和JSON字符串
在SpringMVC環境中,@RequestBody接收的是一個Json對象的字符串,而不是一個Json對象。然而在ajax請求往往傳的都是Json對象,用 JSON.stringify(data)的方式就能將對象變成字符串。
同時ajax請求的時候也要指定dataType: “json”,contentType:”application/json” 這樣就可以輕易的將一個對象或者List傳到Java端!
 
Content-Type
服務器為什么會對表單提交和文件上傳做特殊處理,因為表單提交數據是名值對的方式,
而文件上傳服務器需要特殊處理,普通的post請求(Content-Type不是application/x-www-form-urlencoded)數據格式不固定,不一定是名值對的方式,所以服務器無法知道具體的處理方式,所以只能通過獲取原始數據流的方式來進行解析。
jquery在執行post請求時,會設置Content-Type為application/x-www-form-urlencoded,所以服務器能夠正確解析,而使用原生ajax請求時,如果不顯示的設置Content-Type,那么默認是text/plain,這時服務器就不知道怎么解析數據了,所以才只能通過獲取原始數據流的方式來進行解析請求數據。
---------------------
第一種方式 傳遞的參數Bean
jsp文件:
$("#saveuddd").click(function(){
    var saveDataAry=[];
    var data1={"name":"test","password":"gz"};
    var data2={"name":"ququ","password":"gr"};
    saveDataAry.push(data1);
    saveDataAry.push(data2);
    $.ajax({
        type:"POST",
        url: basePath + "/user/saveUser",
        dataType:"json",
        contentType:"application/json", // 指定這個協議很重要
        data:JSON.stringify(saveDataAry), 
        //只有這一個參數,json格式,后台解析為實體,后台可以直接用
        success:function(data){
            //do something
        }
    })
});
java文件
@RequestMapping(value = "saveUser", method = {RequestMethod.POST })
@ResponseBody //此時的user是map數據,並沒有解析為bean 不建議使用
public void savu(User[] users){
    System.out.println(users) ;
}
使用如下方法,可以使用bean
@RequestMapping(value = "saveUser", method = {RequestMethod.POST })
@ResponseBody
public void saveu( @RequestBody User[] users ){ 
    System.out.println(users.getName()) ; // 此時的user是實體bean
}
--------------------- 

第二種方式 傳遞的鍵值對

jsp同上
另外一種:
 @RequestMapping(value = "saveUser", method = {RequestMethod.POST })
 @ResponseBody
 public void saveu( @RequestBody List<Map<String,String>> users ){ 
 // spring MVC只能解析外層的json格式,內部的bean轉化為Map格式的鍵值對,需要對map解析
      List<User> userList = new ArrayList<User>();
      for(Map<String,String> map : users){
          User u = new User();
          u.setName(map.get("name"));
          u.setPassword(map.get("password"));
          userList.add(u);
      }
     //
--------------------- 

第三種方式

能夠傳遞多個參數,但是每一個參數都是字符串(bean類型的數據會轉化為JSON格式的字符串)

jsp文件
$("#saveuddd").click(function(){
    var saveDataAry=[];
    var data1={"name":"test","password":"gz"};
    var data2={"name":"ququ","password":"gr"};
    saveDataAry.push(data1);
    saveDataAry.push(data2);
    $.ajax({
        type:"POST",
        url: basePath + "/user/saveUser",
        dataType:"json",
        data:{users:JSON.stringify(saveDataAry),aa:"ddd"},
        //可以傳遞多個參數
        //此時的users內容與另外一個參數:aa 的內容一起傳遞,所以后台解析為字符串
        //后台接收的users內容:[{"name":"test","password":"gz"},{"name":"ququ","password":"gr"}]
        //后台接收的 aa 內容:"ddd"
        success:function(data){
            // do something
        }
    })
});
java文件
@RequestMapping(value = "saveUser", method = {RequestMethod.POST})
@ResponseBody
public void saveu( String users , String aa ){
    System.out.println(users) ;
}
--------------------- 

 =========================================================================================

js前端ajax提交list集合參數至后端

方法一

            var orderNosList = new Array();

            var rows = $("#dg_linkOrder").datagrid("getChecked");

            if(rows.length < 1){

                $('#error').dialog('open').dialog('center').dialog('setTitle', '錯誤提示');

                $('#error').text("請選擇一條數據");

            }else  {

                for (var i = 0; i < rows.length; i++) {

                    orderNosList[i] = rows[i].orderNo;

                }

                

                var params = {

                        reserveOrderNoList:orderNosList

                     };

                                

                $.ajax({

                    url : api.LINK_ORDER_RESERVE_RETRY,

                    data : JSON.stringify(params),

                    type : 'POST',

                    contentType: "application/json",

                    dataType : 'json',

                    success : function(res) {

                        var str = '';

                        $(res.reserveFlowList).each(function(i, obj){

                            var responseCode = obj.responseCode;

                            var orderNo = obj.reserveFlow.orderNo;

                            if (responseCode == 0) {

                                str += "訂單號為"+ orderNo +"成功<br/>";

                            } else {

                                str += "訂單號為"+ orderNo + obj.responseMsg +"<br/>"

                            }

                        });

                        

                        $('#error2').dialog('open').dialog('center').dialog('setTitle', '提示');

                        $('#error2').html(str);

                        // 刷新列表

                        linkOrder.unfresh_LinkOrder();

                    }

                });

            }
    @RequestMapping("/http/pss/reserveOrderRetry")

    @ResponseBody

    public Object reserveOrderRetry(@RequestParam("reserveOrderNoList")List<String> reserveOrderNoList) {

        return service.reserveOrderRetry(reserveOrderNoList);

    }

方法二

var demo = new Object();

demo.name="1";

demo.id="2";

var demo2 = new Object();

demo2.name="1";

demo2.id="2";

 

var conditons = [];

conditons.push(demo);

conditons.push(demo2);

 

$(function(){

  $.ajax({

    type:'post',

    url:'/http/pss/demo', 

        contentType: "application/json",

    data:{name:"123",conditions:JSON.stringify(conditons)},

    dataType : 'json', 

    success:function(data){

      console.log(data);

    },

    error: function (XMLHttpRequest, textStatus, errorThrown){

      alert("error");

    }

  });

});
    @RequestMapping("/http/pss/reserveOrderRetry")

    @ResponseBody

    public Object reserveOrderRetry(@RequestParam("conditions")List<Demo> conditions,

                                    @RequestParam("name")String name) {

        

    }

 ===================================================================================================================

===================================================================================================================

Spring 接收表單List集合數據

第一種:

1.新增類,其中有屬性為該對象的集合

public class SettingModel {
    private List<Setting> sets;

    public final List<Setting> getSets() {
        return sets;
    }

    public final void setSets(List<Setting> sets) {
        this.sets = sets;
    }

    @Override
    public String toString() {
        return "SettingModel [sets=" + sets + "]";
    }
    
}

2.表單字段name屬性值為數組形式:

<form action="/user/submitUserList_2" method="post">
        ID:<input type="text" name="users[0].id"><br/>
        Username:<input type="text" name="users[0].name"><br/>
        Password:<input type="text" name="users[0].pwd"><br/><br/>

        ID:<input type="text" name="users[2].id"><br/>
        Username:<input type="text" name="users[2].name"><br/>
        Password:<input type="text" name="users[2].pwd"><br/><br/>
        <input type="submit" value="Submit">
</form>

3.后台接收:

@RequestMapping("/update")
public void update(SettingModel users){ 
  System.out.println(sets);
}

 第二種:

1.ajax請求,POST請求、'Content-Type' : 'application/json;charset=utf-8'、data:json(例如:[{"id":"1","content":"14"},{"id":"2","content":"測試修改2"}])

$.ajax({
                url:'/update',
                type:'POST',
                headers : {  
                        'Content-Type' : 'application/json;charset=utf-8'  
                    },
                dataType:"json",
                data:datastr,//datastr=JSON.stringify(datastr);轉換為JSON格式
                success: function(data){
                    alert('111');
                }
});

2.后台接收:

@RequestMapping(value="/update")
    public void update(@RequestBody List<Setting> sets){
        System.out.println(sets);
    }

 

 

 

 

 
        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM