解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
这是我后台SpringMVC控制器接收isform参数的方法,只是简单的打出它的值: save(
@RequestParam(value = "isform",required = false) String isform) {
System.out.println("isform value: " + isform);
return null;
} 前台页面发送一个post提交表单的请求 发现后台没有取到值 后边我想到的第一种方案是在控制器方法参数里加requestbody来接收json参数,改成如下: }
但是isform的值结果还是为null, 接着我又对比了下以前的项目中,接收post请求的参数,发现一个有趣的现象, 下边是Angular的默认请求头: $httpProvider.defaults.headers.post: (header defaults for POST requests)Content-Type: application/json$httpProvider.defaults.headers.put(header defaults for PUT requests)Content-Type: application/json其中Angular的post和put都是application/json, 而jquery的post请求的"Content-Type"默认为" application/x-www-form-urlencoded",于是我更改了angular的默认Content-Type, });
接下来的请求body变成了这样,但是后边还是没有取到isform的值, 又查了半天,在一个老外的博客上发现了原因: By default,jQuery transmits data using Content-Type: x-www-form-urlencoded and the familiar foo=bar&baz=moe serialization. AngularJS,however,transmits data using Content-Type: application/json and { "foo": "bar","baz": "moe" } JSON serialization 自己翻译了: 默认情况下,jQuery传输数据使用Content-Type: x-www-form-urlencodedand和类似于"foo=bar&baz=moe"的序列,然而AngularJS,传输数据使用Content-Type: application/json和{ "foo": "bar","baz": "moe" }这样的json序列。 所以下把Content-Type设置成x-www-form-urlencodedand之后,还需要转换序列的格式, 下边是我经过老外实践而自己测试过的最终方案: // Override $http service's default transformRequest
$httpProvider.defaults.transformRequest = [function(data) { /**
}]; 在angular模块中添加以上代码,我们来看下效果: 发现与jquery的post请求风格一致了,有木有!!! 看下后台的参数接收情况, isform已经可以正常接收到参数了,大功告成! 以上就是angular的post请求后台接收参数为null的解决方案,希望对大家的学习有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |