2017-10-17 6 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)); 
    } 

자바 서비스 : 당신이 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

? 실제로 스택 추적을 처음부터 받고 있습니까? 적어도 그 코드는 그렇게 생각하지 않습니다. – Kayaman

답변

2

이유.

문자열로 전체 스택 추적을 얻으려면 작업을 수행하는 데 도움이되는 외부 라이브러리를 사용하는 것이 좋습니다.

Apache Commons Lang 라이브러리는 완벽한 선택 일 수 있습니다.

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

당신은이 방법 here에 대한 자세한 내용을 확인할 수 있습니다 이것은 당신이 사용할 필요가 정적 방법이다.

난 당신이 HTTP200 대신 다시 HTTP500를 전송하는 것이 좋습니다 : 당신은 왜 catch 블록에서 200 OK 보내는

String exceptionString = ExceptionUtils.getFullStackTrace(e); 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(exceptionString).build();