我有一個項目需要使用Angular2(最終)發佈到舊的,遺留的Tomcat 7服務器,使用.jsp頁面提供一些REST-ish API 。如何強制Angular2使用x-www-form-urlencoded POST POST
當項目只是一個簡單的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使用request.getParameter("param")
可以通過舊的Java API讀取的格式發佈數據?
編輯:對於任何未來發現此問題的人來說,解決方案實際上非常簡單。設置帖子的主體是這樣的:
let body = `username=${username}&password=${password}`;`
查看Brad的例子。
我認爲角度很蹩腳,很難發佈爲「www-form-urlencoded」。應該有一流的支持來輕鬆做到這一點。 – goat
這似乎不再適用於Angular4 +和HttpClient。 – stt106
你是對的,@ stt106。這個解決方案是舊的,並且特定於早於4的早期版本。當我有時間時,我將重寫上面的解決方案以用於HttpClient。 –