最近项目有个需求,前台需要传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);
}

springboot 传List参数的更多相关文章

  1. SpringBoot中使用切面的每次传的参数,进行解析,验签,并返回解码后的参数

    目的,在每次请求的时候,对每次传的参数,进行解析,验签,并返回解码后的参数, 以json传递: 例子背景: IOT平台提供对外可访问的接口, 需要对所有参数的传递做到 不泄露.认证的目的:所以需要在每 ...

  2. SpringBoot接收前端参数的三种方法

    都是以前的笔记了,有时间就整理出来了,SpringBoot接收前端参数的三种方法,首先第一种代码: @RestController public class ControllerTest { //访问 ...

  3. springboot 获取控制器参数的几种方式

    这里介绍springboot 获取控制器参数有四种方式 1.无注解下获取参数 2.使用@RequestParam获取参数 3.传递数组 4.通过URL传递参数 无注解下获取参数无注解下获取参数,需要控 ...

  4. 测试开发专题:如何在spring-boot中进行参数校验

    上文我们讨论了spring-boot如何去获取前端传递过来的参数,那传递过来总不能直接使用,需要对这些参数进行校验,符合程序的要求才会进行下一步的处理,所以本篇文章我们主要讨论spring-boot中 ...

  5. SpringBoot 如何进行参数校验,老鸟们都这么玩的!

    大家好,我是飘渺. 前几天写了一篇 SpringBoot如何统一后端返回格式?老鸟们都是这样玩的! 阅读效果还不错,而且被很多号主都转载过,今天我们继续第二篇,来聊聊在SprinBoot中如何集成参数 ...

  6. SpringBoot 如何进行参数校验

    为什么需要参数校验 在日常的接口开发中,为了防止非法参数对业务造成影响,经常需要对接口的参数进行校验,例如登录的时候需要校验用户名和密码是否为空,添加用户的时候校验用户邮箱地址.手机号码格式是否正确. ...

  7. 从js向Action传中文参数出现乱码问题的解决方法

    Action获取jsp表单中的中文参数,只要整个项目都采用UTF-8编码格式都不会出现乱码问题:但JSP中用到JS,并从JS向Action传中文参数,就会出现中文乱的现象     做项目的时候,发现A ...

  8. (转) jsp页面 URL传中文参数到Action里面出现乱码

    jsp页面 URL传中文参数到Action里面出现乱码,方法如下: 第一种:在Action中用 new String(str.getBytes("ISO8859_1"), &quo ...

  9. 百度上传工具webuploader,图片上传附加参数

    项目中需要上传视频,图片等资源.最先做的是上传图片,开始在网上找了一款野鸡插件,可以实现图片上传预览(无需传到后台).但是最近这个插件出了莫名的问题,不易修复,一怒之下,还是决定找个大点的,靠谱的插件 ...

随机推荐

  1. ebs 12.1.1 单节点多用户安装

    本次测试环境:操作系统 oracle linux 6.9   oracle ebs 12.1.1   192.168.20.210  erpapp1.hthorizon.com erpapp1 yum ...

  2. Android App增量升级

    移动互联网主打的就是用户体验和产品的快速迭代,通过用户反馈和用户行为跟踪及时调整产品方向,这样才能持续保持生命力和创造力.说的接地气点就是,你频繁的升级更新,有时只是修复了几个bug或者微调了下界面, ...

  3. Sybase·调用存储过程并返回结果

    最近项目要用Sybase数据库实现分页,第一次使用Sybase数据库,也是第一次使用他的存储过程.2个多小时才调用成功,在此记录: 项目架构:SSM 1.Sybase本身不支持分页操作,需要写存储过程 ...

  4. SQL Server2008从入门到精通pdf

    下载地址:网盘下载 内容介绍 编辑 <SQL Server 从入门到精通>从初学者的角度出发,通过通俗易懂的语言.丰富多彩的实例,详细地介绍了SQLServer2008开发应该掌握的各方面 ...

  5. Confluence 6 任务的类型

    下面是有关你可以调整的计划任务列表. Confluence 备份(Back Up Confluence) 对 Confluence 站点执行备份操作. 每集群(Per cluster) At 2am ...

  6. Spark Streaming通过JDBC操作数据库

    本文记录了学习使用Spark Streaming通过JDBC操作数据库的过程,源数据从Kafka中读取. Kafka从0.10版本提供了一种新的消费者API,和0.8不同,因此Spark Stream ...

  7. nginx+php负载均衡集群环境中的session共享方案梳理

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  8. VMware安装windows10系统

  9. 【gearman】gearmand -d 无反应解决

    背景:安装了gearman后,用指令gearmand -d启动后.输入ps -ef|grep gearmand 查找不到.说明服务并没有启动. 查看报错: gearmand -d -l gear.lo ...

  10. uva11865 二分流量+最小生成树

    uva好题真多 本题用二分法找flow,把流量小于flow的全部筛掉,剩下的边建立最小树形图,如果权值大于c或者不能建图,那么修改二分边界 上代码,觉得最小树形图的代码很优美 /* 题意:给定n个点, ...