gpt4 book ai didi

java - 使用 Jackson 对 Scala 案例类进行(反)序列化

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:43 24 4
gpt4 key购买 nike

我使用 Jackson 测试了 Scala 案例类的序列化。

DeserializeTest.java

    public static void main(String[] args) throws Exception { // being lazy to catch-all

final ObjectMapper mapper = new ObjectMapper();
final ByteArrayOutputStream stream = new ByteArrayOutputStream();

mapper.writeValue(stream, p.Foo.personInstance());

System.out.println("result:" + stream.toString());
}
}

Foo.scala

object Foo {
case class Person(name: String, age: Int, hobbies: Option[String])
val personInstance = Person("foo", 555, Some("things"))
val PERSON_JSON = """ { "name": "Foo", "age": 555 } """
}

当我运行上面Java类的main时,抛出了一个异常:

[error] Exception in thread "main" org.codehaus.jackson.map.JsonMappingException: 
No serializer found for class p.Foo$Person and no properties discovered
to create BeanSerializer (to avoid exception,
disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) )

如何(反)序列化 Scala 案例类?

最佳答案

Jackson 期望您的类是一个 JavaBean,这意味着它期望该类的每个属性都有一个 getX() 和/或 setX()。

选项 1

您可以使用注释 BeanProperty 在 Scala 中创建 JavaBean 类.

例子

case class Person(
@BeanProperty val name: String,
@BeanProperty val age: Int,
@BeanProperty val hobbies: Option[String]
)

在这种情况下,val 意味着只定义了一个 getter。如果你想要用于反序列化的 setter ,你将属性定义为 var。

选项 2

虽然选项 1 可行,但如果您真的想使用 Jackson,可以使用包装器来处理 Scala 类,例如 FasterXML's scala module这可能是更好的方法。我没有使用它,因为我只是使用内置的 Json 库来玩。

关于java - 使用 Jackson 对 Scala 案例类进行(反)序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28270621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com