欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springMVC傳遞list對(duì)象的三種使用方式

 更新時(shí)間:2023年11月03日 09:14:48   作者:陳袁  
這篇文章主要介紹了springMVC傳遞list對(duì)象的三種使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

springMVC接收List對(duì)象以及List對(duì)象與其它對(duì)象一起傳參數(shù)的使用方法

概念

ajax請(qǐng)求里Content-type2個(gè)常用類型

application/x-www-form-urlencoded:傳遞的key/value會(huì)經(jīng)過URL轉(zhuǎn)碼,所以如果傳遞的參數(shù)存在中文或者特殊字符需要注意。

默認(rèn)編碼方式。

//例子
//b=曹,a=1
POST  HTTP/1.1(CRLF)
Host: www.example.com(CRLF)
Content-Type: application/x-www-form-urlencoded(CRLF)
Cache-Control: no-cache(CRLF)
(CRLF)
b=%E6%9B%B9&a=1(CRLF)
//這里b參數(shù)的值"曹"因?yàn)閁RL轉(zhuǎn)碼變成其他的字符串了

-application/json:application/json用來告訴服務(wù)端消息主體是序列化后的 JSON 字符串,重點(diǎn)是使用JSON.stringify(data)將json對(duì)象轉(zhuǎn)化是json字符串。

JSON對(duì)象和JSON字符串

在使用@RequestBody注解時(shí),在SpringMVC環(huán)境中,@RequestBody接收的是一個(gè)Json對(duì)象的字符串,而不是一個(gè)Json對(duì)象。

然而在ajax請(qǐng)求往往傳的都是Json對(duì)象,用 JSON.stringify(data)的方式就能將對(duì)象變成字符串。

同時(shí)ajax請(qǐng)求的時(shí)候也要指定dataType: "json",contentType:"application/json" 這樣就可以輕易的將一個(gè)對(duì)象或者List傳到Java端。

@RequestBody與contentType:"application/json"必需配合使用,且數(shù)據(jù)是字符串。

dataType與contentType

  • contentType:指定向后臺(tái)傳遞數(shù)據(jù)編碼格式
  • dataType:指定后臺(tái)返回?cái)?shù)據(jù)格式

對(duì)象復(fù)雜度

傳單個(gè)key-value,或基本類型的數(shù)組最簡單,稍微復(fù)雜一點(diǎn)的是傳對(duì)象數(shù)組([object]),最復(fù)雜的是對(duì)象數(shù)組與key-value一起傳到后臺(tái)

dispatchServlet-mvc.xml配置

$("#test").click(function(){
    var testData={"nameIds": [1,2,3], "age": 18}
    $.ajax({
        type:"POST",
        url: basePath + "/test/testInOut",
        dataType:"json",
        contentType:"application/x-www-form-urlencoded", // 指定這個(gè)協(xié)議很重要
        data:faultList, //只有這一個(gè)參數(shù),json格式,后臺(tái)解析為實(shí)體,后臺(tái)可以直接用
        success:function(data){
        }
    });
})

或者更簡單的寫法

<mvc:annotation-driven/> 

最簡單:單個(gè)數(shù)組對(duì)象和key-value就比較簡單了

前端

$("#test").click(function(){
    var testData={"nameIds": [1,2,3], "age": 18}
    $.ajax({
        type:"POST",
        url: basePath + "/test/testInOut",
        dataType:"json",
        contentType:"application/x-www-form-urlencoded", // 指定這個(gè)協(xié)議很重要
        data:faultList, //只有這一個(gè)參數(shù),json格式,后臺(tái)解析為實(shí)體,后臺(tái)可以直接用
        success:function(data){
        }
    });
})

重點(diǎn)

  • contentType:"application/x-www-form-urlencoded",一般使用這個(gè)當(dāng)然我們也可以使用
  • application/json(它需要序列化json數(shù)據(jù))

后端

//controller層
 @RequestMapping(value = "/test/testInOut")
 @ResponseBody
 public void testInOut(Integer[] nameIds, Integer age){ 
      System.out.println(nameIds, age) ;
 }

重點(diǎn)

  • Integer[] nameIds:接收數(shù)組

稍微復(fù)雜:只接收對(duì)象數(shù)組

下面要使用到的pojo類

//POJO對(duì)象傳輸對(duì)象   RepairFaultList.java
public class RepairFaultList{
    private Integer id;
    private String faultName;//故障名稱
    private String employeeGroup;//所屬工組
    //getter  setter
}

下面還會(huì)使用RepairFaultList.java,需要傳遞的結(jié)構(gòu)體。

前端

$("#test").click(function(){
     //對(duì)象數(shù)組
     var faultList=[];
     var data1={id:1,"faultName":"機(jī)電有問題","employeeGroup":"機(jī)電"};
     var data2={id:2,"faultName":"鈑金有問題","employeeGroup":"鈑金"};
     faultList.push(data1);
     faultList.push(data2);
    $.ajax({
        type:"POST",
        url: basePath + "/test/testInOut",
        dataType:"json",
        contentType:"application/json", // 指定這個(gè)協(xié)議很重要
        data:JSON.stringify(faultList), //只有這一個(gè)參數(shù),json格式,后臺(tái)解析為實(shí)體,后臺(tái)可以直接用
        success:function(data){
        }
    });
})

重點(diǎn)

  • contentType:"application/json"
  • JSON.stringify(faultList)

這里傳入的是一個(gè)數(shù)組,直接使用JSON.stringify(faultList)序列化數(shù)據(jù),不是{"faultList":faultList},相應(yīng)的后端接收數(shù)據(jù)的地方也只有一個(gè)參數(shù)。

后端

//controller層
 @RequestMapping(value = "/test/testInOut", method = {RequestMethod.POST })
 @ResponseBody
 public void testInOut( @RequestBody List<RepairFaultList> faultList ){ 
 //此時(shí)的faultList是map數(shù)據(jù),并沒有解析為bean // 不建議使用
      System.out.println(users) ;
 }

//使用如下方法,可以使用bean
 @RequestMapping(value = "/test/testInOut", method = RequestMethod.POST)
 @ResponseBody
 public void testInOut( @RequestBody RepairFaultList[] faultList ){ 
     // 此時(shí)的faultList是實(shí)體bean
      System.out.println(users.getName()) ; 
 }

重點(diǎn)

  • RepairFaultList[]或List<RepairFaultList>
  • method=RequestMethod.POST,指定post請(qǐng)求方式
  • @RequestBody注意faultList是隨機(jī)命名,沒要求。

還有種不需要POJO對(duì)象的寫法,比較另類,代碼如下

//前端同上
//controller層
 @RequestMapping(value = "/test/testInOut", method = RequestMethod.POST)
 @ResponseBody
 public void testInOut( @RequestBody List<Map<String,String>> faultList ){ // spring MVC只能解析外層的json格式,內(nèi)部的bean轉(zhuǎn)化為Map格式的鍵值對(duì),需要對(duì)map解析
      List<RepairFaultList> result = new ArrayList<RepairFaultList>();
      for(Map<String,String> map : faultList){
          RepairFaultList u = new RepairFaultList();
          //一系列g(shù)et  set數(shù)據(jù)
      }
     // 這里就可以使用 result 了
 }

最復(fù)雜:對(duì)象數(shù)組與key-value一起傳

使用@RequestBody與json一起操作,上面說過,application/json用來告訴服務(wù)端消息主體是序列化后的 JSON 字符串。

前端

前端請(qǐng)求

     //基本數(shù)據(jù)類型數(shù)組對(duì)象
     var operatorIds = [1,2,3];
     //對(duì)象數(shù)組
      var faultList=[];
      var data1={id:1,"faultName":"機(jī)電有問題","employeeGroup":"機(jī)電"};
      var data2={id:2,"faultName":"鈑金有問題","employeeGroup":"鈑金"};
      faultList.push(data1);
      faultList.push(data2);
      var testData={operatorIds:operatorIds,repairBillId: 110,faultList: faultList};
      $.ajax({
          type:"POST",
          url: basePath + "/test/testInOut",
          dataType:"json",
          contentType: application/json,
          data:JSON.stringify(testData), //只有這一個(gè)參數(shù),json格式,后臺(tái)解析為實(shí)體,后臺(tái)可以直接用
          success:function(data){
          }
      });
  })

重點(diǎn)

  • contentType: application/json,指定數(shù)據(jù)編碼格式
  • JSON.stringify(testData)序列化數(shù)據(jù),字符串

后臺(tái)

//POJO對(duì)象   創(chuàng)建一個(gè)對(duì)象由于存放key-value和對(duì)象數(shù)組  AppointPrePersonRo.java
public class AppointPrePersonRo {
    private Integer[] operatorIds;
    private List<RepairFaultList> faultList;
    private Integer repairBillId;
    //getter setter
}

//controller層
@RequestMapping(value = "/test/testInOut")
@ResponseBody
 public String testInOut(@RequestBody  AppointPrePersonRo appointPrePersonRo) {
         return "sucess";
     }
 }

這樣就可以接收對(duì)象數(shù)組和key-value混合的數(shù)據(jù)。

重點(diǎn)

- 創(chuàng)建AppointPrePersonRo類,由于保存接收的數(shù)據(jù)對(duì)象

- @RequestBody注解,必需與application/json配合使用

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論