现在在做的项目用到了SpringMVC框架,需要从前端angular接收请求的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 login(){ $.AJAX({ url: "Service/login", type: "POST", ContentType: "application/Json", dataType: "Json", data: JsON.stringify({ MachineIP: "127.0.0.1", AppTag: "4", RequestInfo:{ StaffCode: "", Password: "", StaffCard: "01411" }, }), async: true, success: function(data) { var ss = JsON.stringify(data); $( "#result").val(ss); console.log(ss); } }); } 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 = "/login",method = RequestMethod.POST) @ResponseBody public ResponseProtocolMap login(@Requestbody JsONObject requestJson,httpServletRequest request) { ResponseProtocolMap responseProtocolMap = null; String machineIP = RequestJsonUtils.getMachineIP(requestJson); String appTag = RequestJsonUtils.getAppTag(requestJson); JsONObject requestInfo = RequestJsonUtils.getRequestInfo(requestJson); if (requestInfo == null) { responseProtocolMap = new ResponseProtocolMap( "-1","参数错误"); } else { String staffCode = RequestJsonUtils.getValueByKey(requestInfo,"StaffCode"); String password = RequestJsonUtils.getValueByKey(requestInfo,"Password"); String staffCard = RequestJsonUtils.getValueByKey(requestInfo,"StaffCard"); responseProtocolMap = sysLoginService.login(staffCode,password,staffCard,appTag,request); } return responseProtocolMap; } @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‘}"。
总结以上是内存溢出为你收集整理的通过Ajax进行POST提交JSON类型的数据到SpringMVC Controller的方法全部内容,希望文章能够帮你解决通过Ajax进行POST提交JSON类型的数据到SpringMVC Controller的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)