使用jackson库获取导致JacksonParseException的属性或字段名称

问题描述 投票:0回答:2

我在REST应用程序中使用映射到Java POJO对象的json请求时遇到问题。在请求json中,如果我传递的是整数值而不是布尔值,则应用程序将引发以下异常

org.codehaus.jackson.JsonParseException: Unexpected character ('e' (code 101)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: org.apache.catalina.connector.CoyoteInputStream@6ab41dbb; line: 2, column: 17]

[当我创建实现ExceptionMapper-JsonParseException-的提供程序类时,我能够自定义将错误消息定义为常见错误消息,但是我需要特定的错误消息。

预期响应:

employee id cannot be a "string" or isSupervisor can be either be "true" or "false"

以下是项目中使用的jar:

jackson-core-asl-1.9.2.jar
jackson-mapper-asl-1.9.2.jar
jackson-jaxrs-1.9.2.jar
jackson-xc-1.9.2.jar
jersey jars of version 1.2
other jars not related to this issue
Jdk5 environment

[此应用程序是一个REST应用程序,它在apache tomcat 5和web.xml文件中运行,来自Jackson库的JacksonJsonProvider已配置并用于将json转换为Java对象。如果提供的json输入请求正确映射到POJO对象,则一切正常。仅当数据不匹配时,才会抛出上面显示的异常。

java json rest jersey jackson
2个回答
0
投票

您得到的不是数据不匹配的兼容性问题,而是一个严重的JSON解码错误。因此,这里最好的选择是查看基础输入,以了解为什么会收到声称为JSON的内容,但事实并非如此(因为它不是有效的JSON内容)。

关于财产名称;使用JsonParser.getCurrentName()应该可以使用。如果需要,则需要手动构造JsonParser(通过ObjectMapper.getFactory().createParser(...),然后将其赋予readValue()ObjectMapperObjectReader方法。)>

最后,如果这是一个数据绑定问题(而不是解码),则异常本身将具有更多信息。


0
投票

当spring无法将json绑定到请求对象时,将出现JsonMappingException。例如,您的字段是整数,但您发送的数字非常大,大于整数。当您使用不正确的类型请求请求时,另一个例外是JsonParseException。您的请求对象是字符串,例如,您发送整数。这两个异常都是HttpMessageNotReadableException的原因。因此,您必须处理此异常。而且您必须检查原因以了解异常原因。您可以使用处理异常。

© www.soinside.com 2019 - 2024. All rights reserved.