从 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());
我认为这是获取无效属性名称的正确方法。
我们有一些移动客户端正在使用的 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());
我认为这是获取无效属性名称的正确方法。