Java 从HttpMessageTreadable异常中获取路径变量
我们有一些移动客户端正在使用的web服务,在这些服务中,移动客户端发出一些请求,我们返回响应。不知何故,如果客户端发出任何无效请求,我们会抛出自定义Java 从HttpMessageTreadable异常中获取路径变量,java,spring,variables,path,httpexception,Java,Spring,Variables,Path,Httpexception,我们有一些移动客户端正在使用的web服务,在这些服务中,移动客户端发出一些请求,我们返回响应。不知何故,如果客户端发出任何无效请求,我们会抛出自定义异常,但最近移动客户端发出了一些超出长变量范围的请求客户端有不同的变量,例如:: { "accountId":"343" "Amount":"90909090909090909090" } 如果accountId或Amount的值超过19位,我们会得到HttpMessageNotradable异常,因为范围超
异常
,但最近移动客户端发出了一些超出长变量范围的请求
客户端有不同的变量,例如::
{
"accountId":"343"
"Amount":"90909090909090909090"
}
如果accountId或Amount的值超过19位,我们会得到HttpMessageNotradable
异常,因为范围超出了长值。但从异常中,我无法获取引发异常的变量,无论是对于accountId
还是Amount
。从异常中,我在\u path
变量中获取此信息,但我无法获取它。
在path变量中,我得到如下结果:
[com.Upload["AccountInfo"], com.Info["Account"]]
是否有人知道如何获取此信息。以下代码打印出导致异常的字段
InvalidFormatException invalidFormatException = (InvalidFormatException) exception
.getCause();
System.out.println(invalidFormatException.getPath().get(0)
.getFieldName());
@只要字段处于第一级,即OP给出的示例,ArunM的答案就有效
但是当字段位于嵌套json中时会发生什么?在下面的示例中,假设paymentType
的值错误
{
"userType": "CUSTOMER",
"payment": {
"amount": 123456,
"paymentType": "INTERNET_BANKING"
}
}
在上面的示例中,如果userType
的值有任何错误,则\u path
中只有一个元素
但是,如果付款中的任何值是错误的,例如paymentType
,那么\u path
变量中将有多个元素。表示层次属性的每个元素
因此,对于paymentType
,\u path
将包含如下所示的2个元素:
_path[0].fieldName = "payment"
_path[1].fieldName = "paymentType"
因此,正确的方法是获取\u path
中的最后一个元素,如下所示。如果需要,我们可以使用所有元素构建完整的路径
InvalidFormatException ifx = (InvalidFormatException) exception.getCause();
System.out.println(ifx.getPath().get(ifx.size() - 1).getFieldName());
我认为这是获取无效属性名的正确方法