从 HttpMessageNotReadable 异常中获取路径变量

Get path variable out of HttpMessageNotReadable exception

我们有一些移动客户端正在使用的 Web 服务,其中移动客户端发出一些请求,我们 return 响应它们。如果客户端发出任何无效请求,我们将抛出 Custom Exceptions
但最近移动客户端发出了一些超出 Long 变量范围的请求。
客户端有不同的变量 ex ::

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

如果 accountId 或 Amount 的值超过 19 位,我们会得到 HttpMessageNotReadable 异常,因为范围超出长值。但是从异常中我无法获取引发异常的变量,无论是 accountId 还是 Amount。从异常中,我在 _path 变量中获取此信息,但我无法获取它。

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

的东西
[com.Upload["AccountInfo"], com.Info["Account"]]

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

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

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

@ArunM 的答案只要该字段处于第一级即 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());

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