如何使用XStream将具有默认值的XML解组为空字符串?
问题描述:
我想弄清楚如何解析XML时,标签是缺少的,我可以设置为空字符串,而不是NULL的默认值。目前XStream使用null,这不是我想要的。如何使用XStream将具有默认值的XML解组为空字符串?
该课程有超过40个属性,都是String。有一个构造函数,每个都有默认值。我的意思是,像这样:
case class MyData(id: String = "", b: String = "", ....)
(是的,我想使用Scala使用它)
技术上我可以写它们设置为空字符串自定义转换器,但是感觉有点傻。
我试图用这个
new XStream(new PureJavaReflectionProvider())
从这里提出:https://stackoverflow.com/a/29747705/598562
它似乎没有工作,虽然。
任何其他的想法?
答
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("", "")
}
看到这个答案:https://stackoverflow.com/a/12042095/4899193 –
但是这JAXB,不西河 – sowen