2016-10-31 8 views
0

サーブレットに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 &quot; 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(/(&quot\;)/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); 
    }); 
} 
+1

あなたは、ステータスのテキストとして応答を送信するのではなく体としてそれを送っています応答の。さらに、{"status": "OK"}を送ることは役に立たない。それはHTTPステータス200が既に意味するものです。また、Angular2 Httpサービスを、この低レベルの移植性のない、乱雑なxhrコードの代わりに使用するのはなぜですか? –

+0

@JBNizet私は、「今はサーブレットを使用する必要があります」という要件があるため、これが割り当ての印象を受けます。私はこのコードは非常に実用的であるとは考えていません。しかしAngular2ポイントで合意した。 – rmlan

+0

割り当てられていません。私はプロダクションUIをAngular2/JAX-RS(jsp/Servletsから)に変換しています。締め切りになっています。私はすべてのサーブレットをJAX-RSに変換しましたが、ファイルのアップロードをサポートしています。私はJAS-RSの問題を解決するまで、サーブレットを使ってファイルをアップロードします。 –

答えて

1

setStatus(int, String)方法は、実際にはまさにこの理由(第二引数の目的の曖昧さ)のために推奨されていません。あなたがしようとしていることを実際に行うつもりはありませんでした。

代わりに、単にsetStatus(int)方法でステータスを設定し、応答のプリントライターにあなたのJsonObjectを書いて考えてみます。

response.setStatus(HttpServletResponse.SC_OK); 
response.getWriter().println(jsonObj.toString()); 
+0

これは動作します。私はこれを以前に試してみましたが、Angular2でエラーが発生しないことがわかりましたが、サーブレットが返したAngular2 xhrにJSONが表示されませんでした。返されたJSONは、JSONオブジェクトとして返されます。 –

+0

なぜあなたはそれをAngular2 xhrと呼んでいますか?実際のリクエストを行うために投稿したjavascriptコードはAngular2とほとんど関係ありません。あなたはあなたの質問にコメントで述べたJB Nizetとして$ httpサービスを使用しているはずです。 – rmlan

+0

修正された表現:これは機能します。私は以前これを試してみて、XMLHttpRequestでエラーを起こさないことを発見しましたが、サーブレットが返したXMLHttpRequestでJSONが表示されませんでした。返されたJSONは応答として文字列として返されます。 –

関連する問題