サーブレットにAngular2を使用してPOST呼び出しを行っています。今はサーブレットを使用する必要があります。サーブレットが"をAngularJS2コールに返す
xhrstatusText: {"status":"OK"}
replaced statusTest={"status":"OK"}
を:サーブレットは、私は、コンソールでこれを見ているため、「JSON応答に
"
を含む代わりの応答に失敗など、すべての応答を応答してJSONを返すが、角度を示しています
私はこの問題は、サーブレットや角度の呼び出しであるかはわからない。
サーブレット
public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
JsonObject jsonObj = Json.createObjectBuilder().add("status", "OK").build();
response.setStatus(HttpServletResponse.SC_OK, jsonObj.toString());
}
Angular2 POSTコール
makeFileRequest(params: Array<string>, files: Array<File>) {
return new Promise((resolve, reject) => {
var formData: any = new FormData();
var xhr = new XMLHttpRequest();
for(var i = 0; i < files.length; i++) {
formData.append("uploads[]", files[i], files[i].name);
}
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
// Contains " instead of " in JSON.
console.log('xhrstatusText: ' + xhr.statusText);
// This fixes the JSON, but the response is already marked as failed.
var statusTextJson = xhr.statusText.replace(/("\;)/g,"\"");
console.log('replaced statusTest=' + statusTextJson);
if (xhr.status == 200) {
resolve(JSON.parse(xhr.response));
} else {
reject(xhr.response);
}
}
}
xhr.open("POST", this.url, true);
xhr.send(formData);
});
}
!最終的解決 !!!
サーブレット
public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.setStatus(HttpServletResponse.SC_OK);
JsonObject jsonObj = Json.createObjectBuilder().add("status", "OK").build();
response.getWriter().println(jsonObj.toString());
}
Angular2 POSTコールHttpServletResponseのJavadocパー
makeFileRequest(params: Array<string>, files: Array<File>) {
return new Promise((resolve, reject) => {
var formData: any = new FormData();
var xhr = new XMLHttpRequest();
for(var i = 0; i < files.length; i++) {
formData.append("uploads[]", files[i], files[i].name);
}
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
// {"status":"OK"}
console.log('xhr.response: ' + xhr.response);
if (xhr.status == 200) {
resolve(JSON.parse(xhr.response));
} else {
reject(xhr.response);
}
}
}
xhr.open("POST", this.url, true);
xhr.send(formData);
});
}
あなたは、ステータスのテキストとして応答を送信するのではなく体としてそれを送っています応答の。さらに、{"status": "OK"}を送ることは役に立たない。それはHTTPステータス200が既に意味するものです。また、Angular2 Httpサービスを、この低レベルの移植性のない、乱雑なxhrコードの代わりに使用するのはなぜですか? –
@JBNizet私は、「今はサーブレットを使用する必要があります」という要件があるため、これが割り当ての印象を受けます。私はこのコードは非常に実用的であるとは考えていません。しかしAngular2ポイントで合意した。 – rmlan
割り当てられていません。私はプロダクションUIをAngular2/JAX-RS(jsp/Servletsから)に変換しています。締め切りになっています。私はすべてのサーブレットをJAX-RSに変換しましたが、ファイルのアップロードをサポートしています。私はJAS-RSの問題を解決するまで、サーブレットを使ってファイルをアップロードします。 –