客户端无法从服务器接收到异常的堆栈跟踪
问题描述:
下面发布的代码是引发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();
你为什么要发送200 OK catch块?你是否真的获得了堆栈跟踪?我不这么认为,至少是那个代码。 – Kayaman