java - 客户端无法从服务器接收异常的堆栈跟踪

标签 java ajax reactjs web-services client-server

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

最佳答案

您只收到异常消息的原因是因为 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();

关于java - 客户端无法从服务器接收异常的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46783176/

相关文章:

java - 如何使用 jQuery 发布数据并使用 Spring Controller 处理它

java - 从 java 连接 Neo4j 时出错

javascript - 使用带有 ajax 搜索的选择下拉菜单进行更改的 jQuery

javascript - 在数组内的对象中提取数组

javascript - 状态更改时子组件的 props 不会更新

reactjs - 如何将状态从路由器传递到子组件

java - Spring Boot中使用@autowire注解重载构造函数

java - Maven Replacer Plugin 1.5.3 未定义输入文件警告

jquery - 使用 PagedList 分页局部 View

java - 单击无法正常工作时更改链接文本