首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Jackson XMLMapper本地化浮动/双

用Jackson XMLMapper本地化浮动/双
EN

Stack Overflow用户
提问于 2021-11-10 17:15:56
回答 1查看 148关注 0票数 0

我目前正在寻找一种方法,以便在使用XMLMapper从com.fasterxml.jackson.dataformat.xml序列化为XML时,对浮点/十进制分隔符进行本地化。

我面临的问题是:当XMLMapper序列化一个浮点数/十进制时,它现在使用的是默认的“。作为小数分隔符,即"2.00“。

但是,我希望浮点数/双面有一个",“作为分隔符,即"2,00”。

我到处找遍了,但还是没有找到解决办法。

是否有一种使用XMLMapper的优雅方法来做到这一点?还是杰克逊没有这样的功能?

映射器的当前配置是:

代码语言:javascript
复制
    val xmlMapper = XmlMapper()

    xmlMapper.enable(SerializationFeature.INDENT_OUTPUT)
    xmlMapper.propertyNamingStrategy = CustomPropertyNamingStrategy()
    xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true)
    xmlMapper.setDefaultUseWrapper(false)

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2021-12-07 19:19:55

我也为此挣扎了一段时间。尤其令人困惑的是,ObjectMapper::setLocaleXmlMapper.Builder::defaultLocale并没有提供任何帮助。

最后,我决定编写一个自定义序列化程序/反序列化程序对:

代码语言:javascript
复制
val doubleModule = SimpleModule("CommaDoubleDeserialization", Version.unknownVersion())
    // note: this is the com.fasterxml.jackson.module.kotlin.addSerializer extension function
    // it registers the primitive type AND the wrapper class
    .addSerializer(Double::class, object : JsonSerializer<Double>() {
        override fun serialize(value: Double, generator: JsonGenerator, provider: SerializerProvider) {
            generator.writeRawValue(value.toString().replace('.', ','))
        }
    })
    .addDeserializer(Double::class, object : JsonDeserializer<Double>() {
        override fun deserialize(parser: JsonParser, ctxt: DeserializationContext): Double? {
            return parser.valueAsString.trim().replace(',', '.').toDoubleOrNull()
        }
    })
return XmlMapper.xmlBuilder()
    .defaultUseWrapper(false)
    .addModules(doubleModule, kotlinModule())
    .build()

这不是我所期望的优雅的解决方案,但它完成了工作。如果您也需要反序列化到Float,则必须向模块中添加另一个序列化程序和/或反序列化器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69917526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档