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

用GET还是POST取决于你想传递的参数是简单类型还是复杂自定义类型?

1 Spring MVC Controller的GET可以传递JDK定义的几种基础类型 

(@RequestParam Long id)&数组 (@RequestParam String[] names)

2 传递对象建议用POST,参数中写

(@RequestBody XxxRequest query)

----

这里涉及用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



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





最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,054评论 3 119
  • 依旧看不到希望,不过至少比昨天有进步 饮食 早餐:脱脂牛奶+枸杞+蜂蜜和苹果应该是标配了,今天再来点蓝莓,还要感谢...
    Call_me_竞哥哥阅读 1,864评论 2 3
  • 未可知 在那古老的城市 被风吹走的 或许不是我的足迹 不过是 某个人三五厘米的相思 也未可知 不要回头 永远不要回...
    玄素_cc30阅读 2,985评论 0 1
  • 不爱读书的人总是喜欢用书呆子这个词来定义那些喜欢看书又看不惯的人。 首先看不惯说明不是一个频道,不是同一类人。 看...
    樱难而上阅读 3,630评论 0 2
  • 推荐几款好用的扩展包 下面会介绍一些Laravel中一些好用的扩展包,当然,其中有的也是php的扩展包,合理的使用...
    敲代码的小仙女阅读 4,371评论 0 0

友情链接更多精彩内容