2017-10-17 5 views
0

以下のコードは、サーバーによってスローされた例外のためにHTTP 500エラーをスローするクライアントサーバーコードです。私は実際には、HTTP 500エラーの理由を知るためにクライアントに(サーバー側で生成された)例外を送信したい。スタックトレースを送信する場合は、この行return Response.status(200).entity(err).build();を使用していますが、クライアント側で何も印刷されていません。私のコードを見て、私はどのようにサーバーからスローされた例外のスタックトレースを取得できますか教えてください?クライアントはサーバーから例外のスタックトレースを受け取ることができません

ReactJSクライアント:

saveChanges(newRecordsArray) { 
     $.ajax({ 
      type: "POST", 
      url: "http://localhost:8080/UserManagement/rest/myService/save", 
      dataType: "json", 
      contentType:'application/json', 
      data: newRecordsArray, 
      async: false 
     }).then((function(err) { 
      {console.log(err);} 
     }).bind(this)); 
    } 

Javaのサービス:Response.status(200).entity(err).build()は、あなたの例外オブジェクトにtoString()メソッドを呼び出すため

@POST 
    @Path("/save") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response saveNewRecords(JSONArray newRecordsArray) { 
     try { 
      File recordsFile = new File("C:\\Users\\username\\Desktop\\myJSON.txt"); 
      FileWriter fileWriter = new FileWriter(recordsFile); 
      fileWriter.write(newRecordsArray.toString()); 
      fileWriter.close(); 
     } 
     catch (Exception e) { 
      String err = e.getClass().toString(); 
      return Response.status(200).entity(err).build(); 
     } 
     return Response.status(200).entity(newRecordsArray.toString()).build(); 
    } 
+1

は、なぜあなたはcatchブロックで200 OKを送信していますか?最初にスタックトレースを取得していますか?少なくとも、そのコードではそうは思わない。 – Kayaman

答えて

2

あなたが唯一の例外メッセージを取得する理由はあります。

スタックトレース全体を文字列として取得したい場合は、外部ライブラリを使用してジョブを実行することをお勧めします。

Apache Commons Langライブラリは完璧な選択です。これは、あなたが使用する必要が静的メソッドである:

org.apache.commons.lang.exception.ExceptionUtils.getFullStackTrace(e) 

あなたがこの方法hereの詳細を見つけることができます。

私はあなたの代わりにHTTP200のHTTP500を返送することをお勧め:

String exceptionString = ExceptionUtils.getFullStackTrace(e); 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(exceptionString).build(); 
関連する問題