【问题标题】:Jackson (JSON) throws JsonMappingException when Float is null当 Float 为空时,Jackson (JSON) 抛出 JsonMappingException
【发布时间】:2011-04-01 22:10:10
【问题描述】:

我正在使用 Spring(与 Jackson)和 jQuery 将表单作为对象传递。我的 pojo 包括可为空的浮点数。但是,当字段为空时,Jackson 会抛出异常:

org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.lang.Float from String value '': not a valid double value

为了允许空值(或表单字段中的空值),我必须做什么?

谢谢 呃

【问题讨论】:

  • 你确定是null,而不是""?
  • 其实就是"",但是有什么区别呢?好吧,就说吧,我想在传递空字段时没有错误地相处。
  • 如果 JSON 中的值实际上是 null 而不是 "",会发生什么?即使在 Javascript 中,null 和 "" 也是不同的值。
  • 好吧,我知道“null”表示没有任何值,“”是一个空字符串,为其分配了一些内存,并且可能存储了“\0”。但是,我曾期望并发框架足够复杂,可以处理如此明显的需求......

标签: jquery json spring spring-mvc jackson


【解决方案1】:

默认情况下,Jackson 确实只将显式 JSON null 视为 null 值。但是,如果需要从空字符串强制转换为 null,则添加功能请求很容易。实际上,这听起来像是一个不错的改进——这就是开源项目经常被改进的方式,基于用户对他们认为应该存在的东西的要求,事情应该工作的方式。

在短期内,您还可以注册自定义反序列化器(http://wiki.fasterxml.com/JacksonHowToCustomDeserializers 讲述了一些有关它的信息,尽管不是指南),它接受空字符串并产生 null。

【讨论】:

  • 谢谢,这就是我正在寻找的解决方案。无论如何,我了解如何创建自定义序列化程序,但我不知道如何使其与 Spring 一起使用。有什么建议吗?
  • 我不知道详细信息,但是对于值类型,您也许可以将 @JsonDeserialize(using=...) 用于值类型(如果可能的话)。如果没有,您需要能够访问 ObjectMapper。 wiki.fasterxml.com/JacksonHowToCustomDeserializers 有一个小文档说明注册。但这也假设完全控制,这对于 Spring 可能不是真的。 FWIW,处理空字符串的功能请求是 (jira.codehaus.org/browse/JACKSON-349),它至少会成为 1.6 的一部分。
【解决方案2】:

最好的办法是检查 javascript 代码中的空字符串并在这种情况下传递 null。

【讨论】:

  • 谢谢,这将是我的原型设计解决方案。然而,我不认为客户端是进行这种转换的正确位置。
猜你喜欢
  • 2014-01-15
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多