JAVA

springMVC 参数 /复杂对象/ List /问题

2018-06-18  本文已影响0人  LAMYMAY

这里涉及用ajax向controller发送数据。方法是将ajax发送json数据,controller获取到json数据解析封装处理。以下将介绍:1传递json数据 2并封装的做法 

看图

参数接收

1、 参数是基础类型

(byte、short、int、long、float、double、boolean、char)

1.1-AJAX

$.ajax({

 url : "someurl",

 type : "POST",

 dataType : "JSON",

 data : {"name":"test", "password":"testpassword"},

 success : function(data) {

  console.log(data)

 }

})

1.2-JAVA

@RequestMapping("someurl")

@ResponseBody     //说明返回的是一个对象

public SomeData basicType(@RequestParam String name, @RequestParam String password){

 //具体业务方法

}

2、 参数是简单的对象类型

简单的对象类型是指,在对象中不包含复杂的数据结构类似于list,map等。在这里可以使用标签@ModelAttribute来直接将JSON数据封装成对象。

说明:

2.1 JAVA

@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.

@RequestMapping(value = "saveUser", method = {RequestMethod.POST }})

    @ResponseBody 

    publicvoidsaveUser(@RequestBody List users) {

        userService.batchSave(users);

    }

2.2 JavaScript

$(document).ready(function(){

        var saveDataAry=[]; 

        var data1={"userName":"test","address":"gz"}; 

        var data2={"userName":"ququ","address":"gr"}; 

        saveDataAry.push(data1); 

        saveDataAry.push(data2);       

        $.ajax({

            type:"POST",

            url:"user/saveUser",

            dataType:"json",     

            contentType:"application/json",             

            data:JSON.stringify(saveData),

            success:function(data){

            }       });    });

public class User{        //模型 用户的属性name,age

 private String name;

 private String address;

 private int age;

 //省略 getters and setters

}

@RequestMapping("/someurl")

@ResponseBody

public SomeData fun(@ModelAttribute User user){

//具体方法

}

$.ajax({

 url : "someurl",

 type : "POST",

 dataType : "JSON",

 data : {

  'name : 'test',

  'age' : 10

 },

 success : function(data) {

  console.log(data)

 }

})

3、参数是 复杂对象

//数据模型

public class User{

 private String name;

 private int age;

 private List<String> names;//朋友的名字

 private List<User> friends;//朋友

 //getters and setters

}

@RequestMapping("someurl")

@ResponseBody

public SomeData fun(@RequestBody User user){

 //方法详情

}

$.ajax({

 var friends=new Array();

var u1= {  'name': '小红',  'age ': 10 };

var u2= {  'name': '小红',  'age ': 10 };

friends.push(u1);

friends.push(u2);

var user={}

user.friends=friends;

 url : "someurl",

 type : "POST",

 dataType : "JSON",

 contentType:"application/json",

 data : JSON.stringify(user),

 success : function(data) {

  console.log(data)

 }

})

4、参数是 数组类型List<T>或 T[] ( T为基本数据类型 )

 $.ajax({  

                    type: 'POST',  

                    url: "/Api/Conversation/CancelRegister",                      

contentType: 'application/json;charset=utf-8',//将json数据以request payload的形式发起请求  

                    data: JSON.stringify(listData),  

                    success: function (response) {}  

}); 

-------------

但是以下的三种方式,在后端都无法有效的收到数据

$.post(url,{'list':data},function(success){...})  

或者  

$.ajax(type:"post",data:{"list":data},success:function(success){...})  

或者  

varformData=new FormData();  

formData.append("list",data);  

$.ajax(type:"post",data:formData,success:function(success){...})  

----------------------

list参数的其他问题

https://stackoverflow.com/questions/17560258/pass-array-data-from-javascript-in-browser-to-spring-mvc-controller-using-ajax/answer-17560332

-------------------------------------------------------------------------

上一篇下一篇

猜你喜欢

热点阅读