【问题标题】:YAML Jackson - NullPointerException when mapping an Integer propertyYAML Jackson - 映射整数属性时出现 NullPointerException
【发布时间】:2016-08-22 02:43:03
【问题描述】:

杰克逊 2.6.5

我尝试将 YAML 文件映射到包含整数属性的 POJO,当它读取数字属性时,它会抛出:

com.fasterxml.jackson.databind.JsonMappingException: (原为 java.lang.NullPointerException)

有趣的是,如果我单引号文件中的数字属性,它会很好地解析它们(我猜它会将字符串转换为整数)

我必须为 Jackson 设置任何标志以使其不尝试转换数值或其他东西吗?

谢谢

【问题讨论】:

  • 我发现这种行为是在 Jackson 2.5.2 中引入的,在以前的版本中它可以正常工作
  • 真的吗?你是从哪里发现网上关于这个的解释的?
  • 只是试错,我降级到一个没有这个问题的低版本,然后我逐渐升级版本,直到我发现是那个版本引入了这个行为
  • 如果这只发生在整数上,它可能是由杰克逊核心的这种变化引起的:github.com/FasterXML/jackson-core/commit/… 引入了一个新方法 _parseInt。这也必须在 YAMLParser 中被覆盖。还升级 dataformat-yaml 依赖项应该可以解决问题。

标签: java jackson yaml


【解决方案1】:

我遇到了同样的问题。

要导入 YAMLFactory,我在 pom.xml 中添加以下文件,

        <dependency>
            <groupId>com.aceevo.ursus</groupId>
            <artifactId>ursus-example-application</artifactId>
            <version>0.2.7</version>
        </dependency>

但正确的是下面,

        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
            <version>2.9.2</version>
        </dependency>

所以,我更改了这个文件,问题就消失了。

【讨论】:

    【解决方案2】:

    我发现我遇到了同样的问题。

    我在一个单独的项目中尝试了一个简单的 yaml 文件,结果按预期工作(无论是什么类型的字段都不需要引用!)所以我不完全确定为什么会发生这种情况。

    但是,在与 POM 和 Yaml 进行了一番斗争之后,我认为这现在可以工作了,我认为这是因为我清理了完整的(生产)yaml 以删除我们正在使用的不同类型的引号 - 有一个' 和 " 的混合,我尽可能删除了所有引用,然后事情又开始工作了。

    您可能还需要启用“ALLOW_UNQUOTED_FIELD_NAMES”:

    mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
    

    但我不相信这是使它起作用的原因,也不相信它是引用值的原因!

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 2018-09-15
      • 2019-09-10
      • 2016-02-10
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多