【问题标题】:the client is unable to receive the stack-trace of the exception from the server客户端无法从服务器接收异常的堆栈跟踪
【发布时间】:2017-10-17 05:40:44
【问题描述】:

下面发布的代码是一个客户端-服务器代码,它会抛出 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 服务:

@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();
    }

【问题讨论】:

  • 为什么要在 catch 块中发送 200 OK?您实际上是否首先获得了堆栈跟踪?我不这么认为,至少对于那个代码。

标签: java ajax reactjs web-services client-server


【解决方案1】:

您之所以只收到异常消息是因为Response.status(200).entity(err).build() 在您的异常对象上调用了toString() 方法。

如果您想以字符串形式获取完整的堆栈跟踪,那么我建议您使用外部库来帮助您完成这项工作。

Apache Commons Lang 库可能是一个完美的选择。这是您需要使用的静态方法:

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

您可以找到有关此方法的更多详细信息here

我建议你发回 HTTP500 而不是 HTTP200:

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

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 2012-12-12
    • 2023-02-17
    • 1970-01-01
    • 2011-01-05
    • 2017-08-06
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多