【问题标题】:How to unmarshall XML with default value as empty string using XStream?如何使用 XStream 将具有默认值的 XML 解组为空字符串?
【发布时间】:2017-09-16 04:53:59
【问题描述】:

我试图弄清楚当标签丢失时如何解组 XML,我可以将默认值设置为空字符串而不是 NULL。目前 XStream 使用的是 null,这不是我想要的。

这个类有超过 40 个属性,它们都是字符串。每个构造函数都有一个默认值。我的意思是,像这样:

case class MyData(id: String = "", b: String = "", ....) 

(是的,我正在尝试将它与 Scala 一起使用)

从技术上讲,我可以编写一个自定义转换器,将它们设置为空字符串,但这感觉有点傻。

我试过用这个

new XStream(new PureJavaReflectionProvider()) 

这里建议:https://stackoverflow.com/a/29747705/598562

但它似乎不起作用。

还有什么想法吗?

【问题讨论】:

标签: java scala xstream


【解决方案1】:

XStreams 使用默认的空构造函数,然后通过调用 setter 来跟踪它。所以,要让它在没有自定义转换器的情况下工作,那么你需要创建一个显式的空构造函数,它用你期望的默认值填充所有内容。这是一个示例,工作应用程序:

import com.thoughtworks.xstream.XStream
import com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider

object Hello extends App {
  val xstream = new XStream(new PureJavaReflectionProvider())
  xstream.alias("MyData", classOf[MyData])
  val output = xstream.fromXML("<MyData><id>This should fill in</id></MyData>")
  println(output)
}

case class MyData(id: String = "", var b: String = "") 
{
   def this() = this("", "")
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2018-05-01
    • 2011-04-28
    相关资源
    最近更新 更多