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&param=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('&');  }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信被骗1800怎么办 存储卡无法格式化怎么办 内存卡硬件损坏怎么办 苹果换新手机id怎么办 支付宝存在风险怎么办 键盘玩游戏失灵怎么办 机械键盘按键冲突怎么办 想和他和好怎么办 异地恋吵架了怎么办 异地恋吵架后怎么办 横屏游戏变竖屏怎么办 三星w2016购买后怎么办 电脑账户删不了怎么办 手机副版出问题怎么办 越狱证书过期了怎么办 iphone7不停重启怎么办 手机被病毒入侵怎么办 苹果手机不息屏怎么办 苹果手机散屏怎么办 苹果手机屏幕死机了怎么办 苹果手机屏死机怎么办 微信号账号异常怎么办 手机设置加密了怎么办 华为手机触屏坏了怎么办 安卓启动器停止怎么办 手机显示停止运行怎么办 手机来电被拦截怎么办 手机被加黑名单怎么办 手机短信被屏蔽了怎么办 手机信息被拦截怎么办 手机有感染病毒怎么办 华为p10速度慢怎么办 华为手机清理慢 怎么办 华为手机有回音怎么办 手机没有返回键怎么办 手机总显示内存不足怎么办 扩音器耳麦接触不良怎么办 音响插头接触不良怎么办 华为手机耳机声音小怎么办 苹果耳机孔变形怎么办 耳机孔松了怎么办