Java 异常 getMessage() returns 空
Java Exception getMessage() returns null
在尝试将 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() return 为空。但是,如果我只是 return
return Response.status(Response.Status.BAD_REQUEST).entity(format).build();
然后它 return 看起来像这样的堆栈跟踪(我已经裁剪掉了大部分堆栈跟踪,因为它很长)
{
"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() return 为 null?
您获取的序列化对象来自异常cause,消息仍然为空。 Java 异常,因为 SAXParseException 通常包含消息字段和 cause exception
,在这种情况下是另一个异常问题的根源。
您可能对找到根本原因消息的使用 org.apache.commons.lang3.exception.ExceptionUtils.getRootCauseMessage/getRootCauseStackTrace
感兴趣(在您的示例中也可能是您的原因本身有原因)
正如其他人所说,我需要
字符串异常Str = format.getException().getCause().getMessage();
因为我的 'Message' 嵌套在其他元素中。
谢谢大家
除了你提到的解决方案,在这种情况下,检查异常传播并修复它可能是个好主意,这样 'message' 就不会在顶层丢失(即如果你控制底层异常处理)
在尝试将 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() return 为空。但是,如果我只是 return
return Response.status(Response.Status.BAD_REQUEST).entity(format).build();
然后它 return 看起来像这样的堆栈跟踪(我已经裁剪掉了大部分堆栈跟踪,因为它很长)
{
"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() return 为 null?
您获取的序列化对象来自异常cause,消息仍然为空。 Java 异常,因为 SAXParseException 通常包含消息字段和 cause exception
,在这种情况下是另一个异常问题的根源。
您可能对找到根本原因消息的使用 org.apache.commons.lang3.exception.ExceptionUtils.getRootCauseMessage/getRootCauseStackTrace
感兴趣(在您的示例中也可能是您的原因本身有原因)
正如其他人所说,我需要
字符串异常Str = format.getException().getCause().getMessage();
因为我的 'Message' 嵌套在其他元素中。 谢谢大家
除了你提到的解决方案,在这种情况下,检查异常传播并修复它可能是个好主意,这样 'message' 就不会在顶层丢失(即如果你控制底层异常处理)