AngularJs2 http 与SpringMVC后台交互传参问题
来源:互联网 发布:avr单片机交流微信群 编辑:程序博客网 时间:2024/05/24 05:03
AngularJs2 Post传参与SpringMVC后台交互问题
最近在做项目的时候碰到的一个问题。Angular2中的http访问SpringMVC时总是取不到参数。翻出原来写的ng1项目看了之后,试了一下,发现了问题,跟大家分享一下。
angular1.x和2.0默认都是application/json形式,SpringMVC的controller接收值类型是form,contentType是application/x-www-form-urlencoded。所以需要在ng客户端设置header。
ng1
var deffer = $q.defer(); $http({ method: "POST", headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}, }).success(function (response) { deffer.resolve(response); // 声明执行成功,即http请求数据成功,可以返回数据了 }).error(function (data, status, headers, config) { //错误信息 deffer.reject(data); // 声明执行失败,即服务器返回错误 }); return deffer.promise;
ng2
const options = new RequestOptions({'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'});this.http.post(requestUrl, params, options)
设置之后访问依然也是不行,参数类型是在Chorme中是request payload。依然得不到参数。后来查资料发现问题是对象不能当做string传。所以改成form的格式就可以了。
把对象转成 url?param=value¶m=value的格式
贴一下封装好的方法。
ng1
/** * post方法 * @param url * @param param * @returns {Promise} */ post: function (url, param) { var deffer = $q.defer(); $http({ method: "POST", url: domain + url, data: param, headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}, transformRequest: function (obj) { var str = []; for (var p in obj) { str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); } return str.join("&"); } }).success(function (response) { deffer.resolve(response); // 声明执行成功,即http请求数据成功,可以返回数据了 }).error(function (data, status, headers, config) { //错误信息 deffer.reject(data); // 声明执行失败,即服务器返回错误 }); return deffer.promise; }
ng2
import {Injectable} from '@angular/core';import {Http, Headers, RequestOptions} from '@angular/http';import 'rxjs/add/operator/toPromise';@Injectable()export class NetService { private headersJson = new Headers({'Content-Type': 'application/json;charset=UTF-8'}); private headersForm = new Headers({'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}); private domain: String = 'http://localhost:3131/ng2API'; constructor(public http: Http) { } /** * get请求 * @param url * @param mParam * @returns {Promise<TResult|T>} */ public httpGet(url: string) { const options = new RequestOptions({headers: this.headersJson}); const requestUrl: string = this.domain + url; return this.http.get(requestUrl, options) .toPromise() .then(res => res) .catch(err => { return err; }); } /** * post请求 * @param url * @param mParam * @returns {Promise<TResult|T>} */ public httpPost(url: string, mParam: any) { const options = new RequestOptions({headers: this.headersForm}); const requestUrl: string = this.domain + url; return this.http.post(requestUrl, this.encodeParam(mParam), options) .toPromise() .then(res => res) .catch(err => { return err; }); } public getDomainUrl() { return this.domain; } /** * 改变排列格式 * @param obj * @returns {string} */ private encodeParam(obj) { const str = []; for (const key of Object.keys(obj)) { const param = key + '=' + obj[key]; str.push(param) } return str.join('&'); }}
阅读全文
0 0
- AngularJs2 http 与SpringMVC后台交互传参问题
- 使用ajax与springmvc后台交互
- 后台与前端JS的传值交互问题
- js与C#后台交互问题
- 解决 前台与后台数据交互问题
- 前台与后台数据交互问题
- 使用springmvc实现网页前端与后台的数据交互
- springmvc数据绑定笔记、ajax与后台数据交互笔记
- SpringMVC与前/后台的json数据交互
- SpringMVC ajax和后台交互
- HTTP协议实践篇--使用Fiddler与后台php交互
- http请求使用patch,后台Springmvc处理请求参数问题
- AS3与后台交互
- ajax与后台交互
- extjs与后台交互
- jQuery 与后台交互
- 与后台交互注意事项
- ajax与后台交互
- Android实现简单的纸飞机操作(类似于漂流瓶)
- zeros and ones (找规律)
- docker 部署 shipyard
- APK瘦身
- C++语言概述
- AngularJs2 http 与SpringMVC后台交互传参问题
- Unable to execute dex: Multiple dex files define Lcom/loopj/android/http/AsyncHttpClient$1
- 方法
- HDU1018 Big Number
- Java中throw之后还会继续运行吗?
- iOS从相册选择视频和保存视频到相册
- Linux 给新用户授予、设置Tomcat目录的使用权限
- Android 中自动换行的标签实现
- Spring手动回滚事务