Java 异常 getMessage() 返回 null

标签 java error-handling response

在尝试将 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/

相关文章:

java - JNDI - Glassfish JDBC,引用数据源时出错

java - APIv4 直方图 - 无法排序

安卓 : what is the standard way to display errors to the user?

error-handling - RxJS 重试然后 catchError 不起作用

java - Camunda:如何将变量从父进程传递到子进程。 (由事件启动)

java - Tomcat 安装在远程服务器上。如何在本地浏览器上查看

php - 检查 php-code w/o php-cli 的语法,可能吗?

javascript - 从ajax响应中的html获取输入值

java - 如何确认消息传送到 Amazon SQS 队列?

angular - 如何在 Angular 中将 http 响应映射到客户端模型类型