【问题标题】:Get path variable out of HttpMessageNotReadable exception从 HttpMessageNotReadable 异常中获取路径变量
【发布时间】:2016-05-05 08:41:57
【问题描述】:

我们有一些移动客户端正在使用的网络服务,其中移动客户端发出一些请求,我们向它们返回响应。不知何故,如果客户端发出任何无效请求,我们将抛出自定义 Exceptions
但最近移动客户端发出了一些超出 Long 变量范围的请求。
客户端有不同的 ex 变量 ::

    {
      "accountId":"343"
      "Amount":"90909090909090909090"
    }

如果 accountId 或 Amount 的值超过 19 位,我们会收到 HttpMessageNotReadable 异常,因为该范围超出了 long 值。但是从异常中我无法获取针对accountIdAmount 引发异常的变量。从异常中,我在_path 变量中获取此信息,但我无法获取它。

在路径变量中我得到类似::

[com.Upload["AccountInfo"], com.Info["Account"]]

有人知道如何获取这些信息吗?

【问题讨论】:

    标签: java spring variables path httpexception


    【解决方案1】:

    以下代码打印出导致异常的字段。

    InvalidFormatException invalidFormatException = (InvalidFormatException) exception
            .getCause();
    System.out.println(invalidFormatException.getPath().get(0)
            .getFieldName());
    

    【讨论】:

      【解决方案2】:

      @ArunM 的答案有效,只要该字段处于 1 级,即 OP 给出的示例。

      但是当字段在嵌套 json 中时会发生什么?说paymentType在下面的例子中有错误的值?

      {
        "userType": "CUSTOMER",
        "payment": {
                       "amount": 123456,
                       "paymentType": "INTERNET_BANKING"
                    }
      }
      

      在上面的例子中,如果userType的值有问题,_path中只有一个元素。

      但如果付款中的任何值是错误的,例如paymentType_path 变量中将有多个元素。每个元素代表分层属性。

      所以对于paymentType_path 将有 2 个元素,如下图所示:

      _path[0].fieldName = "payment"
      _path[1].fieldName = "paymentType"
      

      因此正确的方法是获取_path 中的最后一个元素,如下所示。如果需要,我们可以使用所有元素构建完整的路径。

      InvalidFormatException ifx = (InvalidFormatException) exception.getCause();
      System.out.println(ifx.getPath().get(ifx.size() - 1).getFieldName());
      

      我认为这是获取无效属性名称的正确方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-31
        • 2018-02-09
        • 1970-01-01
        • 2018-03-20
        • 2019-07-22
        • 2016-08-03
        • 2011-02-19
        相关资源
        最近更新 更多