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

js代码:


  1. function postSimpleData() {
  2. $.ajax({
  3. type: "POST",
  4. url: "Service/SimpleData",
  5. contentType: "application/json", //必须有
  6. dataType: "json", //表示返回值类型,不必须
  7. data: JSON.stringify({ 'foo': 'foovalue', 'bar': 'barvalue' }), //相当于 //data: "{'str1':'foovalue', 'str2':'barvalue'}",
  8. success: function (jsonResult) {
  9. alert(jsonResult);
  10. }
  11. });
  12. }
  13. function login(){
  14. $.ajax({
  15. url: "Service/login",
  16. type: "POST",
  17. contentType: "application/json",
  18. dataType: "json",
  19. data: JSON.stringify({
  20. MachineIP:"127.0.0.1",
  21. AppTag:"4",
  22. RequestInfo:{
  23. StaffCode:"",
  24. Password:"",
  25. StaffCard:"01411"
  26. },
  27. }),
  28. async: true,
  29. success: function(data) {
  30. var ss = JSON.stringify(data);
  31. $("#result").val(ss);
  32. console.log(ss);
  33. }
  34. });
  35. }
  36. function postEmployees() {
  37. $.ajax({
  38. type: "POST",
  39. url: "Service/Employees",
  40. contentType: "application/json",
  41. dataType: "json",
  42. data: JSON.stringify({ "Employees": [
  43. { "firstName": "Bill", "lastName": "Gates" },
  44. { "firstName": "George", "lastName": "Bush" },
  45. { "firstName": "Thomas", "lastName": "Carter" }
  46. ]
  47. }),
  48. success: function (jsonResult) {
  49. alert(jsonResult);
  50. }
  51. });
  52. }

JAVA Controller代码:


  1. @RequestMapping(value = "/SimpleData", method = RequestMethod.POST)
  2. @ResponseBody
  3. public ActionResult SimpleData(string foo, string bar) {
  4. return Json("SimpleData", JsonRequestBehavior.AllowGet);
  5. }
  6. @RequestMapping(value = "/login", method = RequestMethod.POST)
  7. @ResponseBody
  8. public ResponseProtocolMap login(@RequestBody JSONObject requestJson, HttpServletRequest request) {
  9. ResponseProtocolMap responseProtocolMap = null;
  10. String machineIP = RequestJsonUtils.getMachineIP(requestJson);
  11. String appTag = RequestJsonUtils.getAppTag(requestJson);
  12. JSONObject requestInfo = RequestJsonUtils.getRequestInfo(requestJson);
  13. if (requestInfo == null) {
  14. responseProtocolMap = new ResponseProtocolMap("-1", "参数错误");
  15. } else {
  16. String staffCode = RequestJsonUtils.getValueByKey(requestInfo, "StaffCode");
  17. String password = RequestJsonUtils.getValueByKey(requestInfo, "Password");
  18. String staffCard = RequestJsonUtils.getValueByKey(requestInfo, "StaffCard");
  19. responseProtocolMap = sysLoginService.login(staffCode, password, staffCard, appTag, request);
  20. }
  21. return responseProtocolMap;
  22. }
  23. @RequestMapping(value = "/Employees", method = RequestMethod.POST)
  24. @ResponseBody
  25. public ActionResult Employees(List<Employee> Employees) {
  26. return Json("Employees", JsonRequestBehavior.AllowGet);
  27. }


  1. public class Employee{
  2. public string FirstName { get; set; }
  3. public string LastName { get; set; }
  4. }

值得注意的有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'}"。

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

  1. springmvc接收JSON类型的数据

    1.在使用AJAX传递JSON数据的时候要将contentType的类型设置为"application/json",否则的话会提示415错误 2.传递的data需要时JSON类型的 ...

  2. springMVC参数绑定JSON类型的数据

    需求就是: 现在保存一个Student,并且保存Student的friend,一个student会有多个朋友,这里要传递到后台的参数是: var friends = new Array(); var ...

  3. 关于ajax 进行post提交 json数据到controller

    首选需要参考的两个博客: www.cnblogs.com/Benjamin/archive/2013/09/11/3314576.html http://www.cnblogs.com/quanyon ...

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

    View function postSimpleData() { $.ajax({ type: "POST", url: "/Service/SimpleData&quo ...

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

    我的表单如下: <form onsubmit="return false"> <ul> <li><span>用户名</span ...

  6. Mysql里查询字段为Json格式的数据模糊查询以及分页方法

    public void datagrid(CustomFormEntity customForm,HttpServletRequest request, HttpServletResponse res ...

  7. 9.SpringMVC和json结合传递数据 && 10.SpringMVC获取controller中json的数据

  8. SpringMVC——对Ajax的处理(包含 JSON 类型)

    一.首先要搞明白的一些事情. 1.从客户端来看,需要搞明白: (1)要发送什么样格式的 JSON 数据才能被服务器端的 SpringMVC 很便捷的处理,怎么才能让我们写更少的代码,如何做好 JSON ...

  9. Struts2+Jquery实现ajax并返回json类型数据

    来源于:http://my.oschina.net/simpleton/blog/139212 摘要 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的 ...

随机推荐

  1. android selector设置button点击效果(具体)以及常见问题

    button的点击效果学习起来其实比較easy,此点对开发人员来说也是使用的比較频繁的一个知识点,与它相关的还有编辑框的获取焦点时改变背景颜色.选择button选择时改变字体颜色等等.这些其实都是用到 ...

  2. 理解Linq查询

    using System; using System.Linq; static class Program { static double Square(double n) { Console.Wri ...

  3. thinkphp中cookie和session中操作数组的方法

    thinkphp中cookie和session中操作数组的方法 一.ThinkPHP模板中如何操作session,以及如果session中保存的是数组的情况 在ThinkPHP的模板中操作sessio ...

  4. windows 手动添加服务

    windows 手动添加服务方法一:修改注册表 在注册表编辑器,展开分支"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" ...

  5. 《三》build 快速创建模块

    一.将build.php文件复制一份放在 application目录下 二.修改build.php文件代码 <?php return [ 'home' => [ //需要生成的目录 '__ ...

  6. 一入python深似海--对象的属性

    Python中一切皆是对象,每一个对象都能够有多个属性.Python是怎样管理这些属性呢?我们来探讨一下. 属性的__dict__系统 对象的属性包括两部分:类属性和对象属性.对象的属性可能来自于其类 ...

  7. 比MD5 和HMAC还要安全的加密 - MD5 加时间戳

    //1.给一个字符串进行MD5加密 NSString *passKey = @"myapp"; passKey = [passKey md5String]; //2.对第一步中得到 ...

  8. SWTBOK測试实践系列(1) -- 測试在项眼下期的评审投入划算吗?

    測试策略:静态測试还是动态測试? [对话场景] 成功公布某个软件版本号之后,项目团队召开了项目的经验教训总结大会.在会议期间,项目经理小项和測试经理小測进行了例如以下的对话: 小项:"小測, ...

  9. Codeforces 472D

    看官方题解提供的是最小生成树,怎么也想不明确.you can guess and prove it! 看了好几个人的代码.感觉实现思路全都不一样,不得不佩服cf题目想法的多样性 以下说说我自己的理解, ...

  10. Linux平台下Ntop流量监测安装,并实现Netflow全过程

    Linux平台下Ntop流量监测安装,并实现Netflow全过程 更多原创教学视频详见: http://you.video.sina.com.cn/m/1443650204 本文出自 "李晨 ...