通过Ajax进行POST提交JSON类型的数据到SpringMVC Controller的方法

现在在做的项目用到了SpringMVC框架,需要从APP接收请求的JSON数据,为了测试方便,所以直接先用AJAX进行测试,不过刚开始用平时用的ajax方法,提交请求会出现415或者400错误,经过研究,终于可以了,现在做个总结。

js代码:

function postSimpleData() {
        $.ajax({
            type: "POST",
            url: "/Service/SimpleData",
            contentType: "application/json", //必须有
            dataType: "json", //表示返回值类型,不必须
            data: JSON.stringify({ ‘foo‘: ‘foovalue‘, ‘bar‘: ‘barvalue‘ }),  //相当于 //data: "{‘str1‘:‘foovalue‘, ‘str2‘:‘barvalue‘}",
            success: function (jsonResult) {
                alert(jsonResult);
            }
        });
    }
    function postListString() {
        $.ajax({
            type: "POST",
            url: "/Service/ListString",
            contentType: "application/json",
            dataType: "json",
            data: JSON.stringify({ "BuIds": ["1", "2", "3"] }),
            success: function (jsonResult) {
                alert(jsonResult);
            }
        });
    }
    function postEmployees() {
        $.ajax({
            type: "POST",
            url: "/Service/Employees",
            contentType: "application/json",
            dataType: "json",
            data: JSON.stringify({                "Employees": [
                                    { "firstName": "Bill", "lastName": "Gates" },
                                    { "firstName": "George", "lastName": "Bush" },
                                    { "firstName": "Thomas", "lastName": "Carter" }
                                 ]

            }),
            success: function (jsonResult) {
                alert(jsonResult);
            }
        });
    }

JAVA Controller代码:

@RequestMapping(value = "/SimpleData",method=RequestMethod.POST)
@ResponseBody
public ActionResult SimpleData(string foo, string bar){            
    return Json("SimpleData", JsonRequestBehavior.AllowGet);
}

@RequestMapping(value = "/ListString",method=RequestMethod.POST)
@ResponseBody
public ActionResult ListString(List<string> buIds){
    return Json("ListString", JsonRequestBehavior.AllowGet);
}

@RequestMapping(value = "/Employees",method=RequestMethod.POST)
@ResponseBody
public ActionResult Employees(List<Employee> Employees){
    return Json("Employees", JsonRequestBehavior.AllowGet);
}
public class Employee{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

值得注意的有2点:

1)Ajax 选项中

 contentType: "application/json"

这一条必须写,表明request的数据类型是json。

dataType: "json"

这一条表示返回值的类型,不是必须的,且依据返回值类型而定。

2)选项中

data: JSON.stringify({ ‘foo‘: ‘foovalue‘, ‘bar‘: ‘barvalue‘ })

很多时候我们将数据写作:

{ ‘foo‘: ‘foovalue‘, ‘bar‘: ‘barvalue‘ }

这样会导致错误,因为js会默认将这个json对象放到表单数据中,故而导致controller接收不到。

有两种办法处理:第一种方式是用JSON.stringify()函数,其中JSON被Ecmascript5定义为全局对象。

第二种方式是直接用双引号包裹起来,比如data: "{‘str1‘:‘foovalue‘, ‘str2‘:‘barvalue‘}"。

时间: 2024-12-22 15:14:10

通过Ajax进行POST提交JSON类型的数据到SpringMVC Controller的方法的相关文章

通过Ajax进行Post提交Json数据的方法

下面pk10平台出租就为大家分享一篇qq:185 198 884通过Ajax进行Post提交Json数据的方法,具有很好的参考价值,希望对大家有所帮助.一起跟随ws平台出租过来看看吧js代码:1 $.ajax({2 type : "POST", 3 url: js_path + "/maintainAdd/add", 4 data : JSON.stringify(madd_data.editMaintain), 5 contentType : "appl

php 表单提交错误后返回数据消失问题的解决方法

本文章向码农们介绍php 表单提交错误后返回数据消失问题的解决方法,感兴趣的码农可以参考一下. 表单提交错误后返回数据消失怎么办呐,今天就来分析解决一下这个问题. 状况概述: 做填写表单信息提交的时候会碰到一个问题就是当用户填写并提交表单后,程序判断不符合要求并返回,返回之后之前填写的表单信息会被清空了的情况.如果填写的信息量少还无所谓,如果填写的信息量比较多,这会直接打击到填写信息的人的良好心情.因此解决表单提交错误返回后填写的内容消失的问题是一个提高用户体验度的迫在眉睫的问题. 对于这种问题

jquery ajax提交json格式的数据,后台接收并显示各个属性

我的表单如下: <form onsubmit="return false"> <ul> <li><span>用户名</span> <input type='text' placeholder='请输入用户名' name='user'></li> <li><span>密码</span> <input type='text' placeholder='请输入密码'

通过Ajax post Json类型的数据到Controller

View function postSimpleData() { $.ajax({ type: "POST", url: "/Service/SimpleData", contentType: "application/json", //必须有 dataType: "json", //表示返回值类型,不必须 data: JSON.stringify({ 'foo': 'foovalue', 'bar': 'barvalue'

ajax 上传文件,post上传文件,ajax 提交 JSON 格式的数据

ajax简介 前后台做数据交互 前后端做数据交互的方式(三种): (1)浏览器窗口输入地址(get的方式)(2)form表单提交数据(3)ajax提交数据 特点 特点: (1)异步 异步与同步的区别:同步是请求发过去,要等着回应:异步不需要等待,可以进行其他操作 (2)局部刷新 使用 使用: (1)url:匹配的路由 (2)type:发送的的方式 (3)data:发送的数据 (4)success:发送的数据成功回调条数 $('.btn').click(function () { $.ajax({

通过js,修改所有form表单,提交JSON格式的数据

直接上代码 <script>$(function(){ //获取网页中所有的form表单 $("form").each(function(){ //注册表单的提交事件 $(this).submit(function(event) { //屏蔽表单的注册 event.preventDefault(); //获取url var url = $(this).attr("action"); request(url, 'POST', JSON.stringify(

ajax读取返回的json格式的数据

** //alert(msg);//{"serverHost":"23","mail":"32","mailPassword":"23"} //json = eval(json); //alert("===json:id=" + json.id + ",uname=" + json.uname + ",email=" + jso

c#前台向后台传Json类型的数据

JSON.stringify(postdata) var ThesisData = ko.toJS(viewModel.loadData()); ; //后台 var obj = JsonConvert.DeserializeObject(userinfos); JArray ja = new JArray(); if (obj is JArray) { ja = JsonConvert.DeserializeObject<JArray>(userinfos); } else { ja = J

关于在for循环里调用ajax时只能取到最后一个数据的bug的解决方法

首先,造成这中情况的原因在与ajax的异步请求机制,for循环的运行速度远大于ajax异步请求的速度,这就造成了ajax运行时,需要的在for循环里的参数已经运行到最后一个了,所以取到的都是最后一个参数数据. 解决方法:将ajax的请求封装成一个单独的方法,然后在for循环里调用该方法.