如果值以特殊字符开头,则使用 Jackson 解析 YAML 文件失败

我正在尝试解析以下 YAML 内容:

template:
    amplitude: 5
    noise: +-0.01  

由于此异常而失败:

com.fasterxml.jackson.databind.JsonmappingException: empty String (through reference chain: ... ->my.package.Template["noise"])

Template 包含类型为 noise 的属性 FlexValue。我制作了一个自定义 JsonDeserializer,负责解析这种类型的属性的值。该符号允许一些花哨的表达式,因此该类型的名称为 FlexValue。本例中的值“+-0.01”是解串器的有效输入。但是,似乎甚至没有调用解串器。 异常似乎在此之前抛出。

这是我的自定义反序列化器的相关类定义:

class FlexValueParser : JsonDeserializer<FlexValue>() {

    override fun deserialize(p: JsonParser?,ctxt: DeserializationContext?): FlexValue {
        //...
    }

}

自定义解串器注册如下:

@JsonDeserialize(using = FlexValueParser::class)
class FlexValue {
    // ...
}

这个设置似乎工作正常。它也适用于其他类型,但解析方式不同。

如果我在“+-”之前加上一个“0”,这也是一个有效的输入,它会起作用:

template:
    amplitude: 5
    noise: 0+-0.01

“+-”是 YAML 中的一个特殊字符,导致 Jackson 无法解析它,因为它试图做一些超出我预期的事情?我希望它将输入“+-0.01”视为 String,因为它不代表有效的数字输入。

当我使用 noise: ~0.01 时,也会出现同样的问题,这也是我的解串器的有效输入。同样的异常也被抛出,可以通过在卷曲的“~”前加上“0”来避免。

有人可以给我一个提示吗?

hyx_su 回答:如果值以特殊字符开头,则使用 Jackson 解析 YAML 文件失败

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/4360.html

大家都在问