如何强制Angular2使用x-www-form-urlencoded进行POST请求

25 浏览
0 Comments

如何强制Angular2使用x-www-form-urlencoded进行POST请求

我有一个项目需要使用Angular2(final)向一个旧的、遗留的Tomcat 7服务器发送请求,该服务器提供一个类似REST的API,使用.jsp页面。

当项目只是一个简单的JQuery应用程序执行AJAX请求时,这个工作很好。然而,项目的范围已经扩大,需要使用一个更现代的框架进行重写。Angular2看起来非常适合这个任务,除了一个例外:它拒绝使用除了表单数据以外的选项来执行POST请求,而API并不提取这种数据。API希望所有的数据都是urlencoded的,并依赖于Java的request.getParameter("param")语法来提取单个字段。

这是我user.service.ts的一个片段:

import { Injectable }    from '@angular/core';
import { Headers, Response, Http, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class UserService {
    private loggedIn = false;
    private loginUrl = 'http://localhost:8080/mpadmin/api/login.jsp';
    private headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'});
    constructor(private http: Http) {}
    login(username, password) {
        return this.http.post(this.loginUrl, {'username': username, 'password':  password}, this.headers)
            .map((response: Response) => {
                let user = response.json();
                if (user) {
                    localStorage.setItem('currentUser', JSON.stringify(user));
                }
            }
        );
    }
}

无论我将内容类型设置为什么,它总是以未编码的表单数据形式到达。它没有遵守我设置的头信息。

有人遇到过这个问题吗?你如何强制Angular2以一个可以被一个旧的Java API使用request.getParameter("param")读取的格式发送POST数据?

0