在尝试将 JSON 反序列化为对象时,我捕获了一个 SAXParsingException,如下所示。内存不足,所以可能不是 100% 正确,但想法是一样的。
try {
validator.validate(source);
return Response.ok(jsonResponse).build();
}
catch (SAXParseException format) {
String exceptionStr = format.getMessage();
exceptionStr = mapper.writeValueAsString(exceptionStr);
return Response.status(Response.Status.BAD_REQUEST).entity(exceptionStr).build();
}
但是 getMessage() 返回 null。但是如果我只是返回
return Response.status(Response.Status.BAD_REQUEST).entity(format).build();
然后它返回一个如下所示的堆栈跟踪(我已经剪掉了大部分堆栈跟踪,因为它很长)
{
"cause": {
"cause": {
"stackTrace": [
{
"methodName": "run",
"fileName": "Thread.java",
"lineNumber": 745,
"className": "java.lang.Thread",
"nativeMethod": false
}
],
"lineNumber": 0,
"columnNumber": 0,
"message": "cvc-complex-type.2.4.b: The content of element 'Request' is not complete. One of '{\"blahblahblah":echoData, \"blahblahblah":schemeCode}' is expected.",
"localizedMessage": "cvc-complex-type.2.4.b: The content of element 'Request' is not complete. One of '{blahablah":echoData, \"blahbblahblah":schemeCode}' is expected."
},
那么如果异常附加了一条消息,为什么 getMessage() 返回 null 呢?
最佳答案
您从异常中获取的序列化对象 cause ,消息仍然是空的。 Java 异常(如 SAXParseException)通常包含消息字段和导致异常
,在这种情况下,另一个异常是问题的根源。
您可能对使用org.apache.commons.lang3.exception.ExceptionUtils.getRootCauseMessage/getRootCauseStackTrace
感兴趣,它找到了根本原因消息(如您的示例中也可能是您的原因有原因本身)
关于Java 异常 getMessage() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59873855/