Jackson:自定义 JSON 反序列化器
我正在使用 Jackson 库的 ObjectMapper 将 JSON 反序列化为 Java 对象。我正在使用 Spring '接线'。我创建了自定义反序列化器来执行从 JSON 字符串到 POJO 的转换。但是,当输入错误时(例如,数字作为“124A”传递 - 非法字符),则会调用默认反序列化器并抛出 NumberFormatException。有没有办法阻止默认转换器被调用?
I am using Jackson library's ObjectMapper for deserializing JSON into Java objects. I am using Spring 'wiring'. I have created custom deserializers to do the conversion from JSON string to POJO. However, when the input is bad (eg. a number is passed as "124A" - illegal character) a default deserialiser is invoked and bombs with the NumberFormatException. Is there a way to prevent default converters from being called?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好的,假设输入不是有效的 JSON(数字不能以“$”开头或包含“$”),则不会调用反序列化器,并且任何更改都必须应用于解析器。 Jackson 中没有任何开关允许此类内容被视为数字。
如果您可以控制输入,只需将值更改为字符串(在值周围添加双引号)。然后解析器将其作为 JSON 字符串传递,数据绑定组件有机会处理它(JsonDeserializer)。
Ok, given that input is not valid JSON (numbers can not start with or contain '$'), deserializer will not be called, and any change would have to apply to parser. There are no switches in Jackson to allow such content to be considered numbers.
If you can control input, just change value to a String (add double-quotes around value). Parser then passes it as JSON String, and data binding components get a chance to handle it (JsonDeserializer).