use*_*880 7 json scala scalatra json4s
我有一些案例类定义如下:
sealed trait Breed
case object Beagle extends Breed
case object Mastiff extends Breed
case object Yorkie extends Breed
case class Dog(name: String, breed: Breed)
Run Code Online (Sandbox Code Playgroud)
我还有一个使用Scalatra定义的端点:
post("/dog") {
val dog = parsedBody.extract[Dog]
...
}
Run Code Online (Sandbox Code Playgroud)
我想要这个JSON对象:
{
name: "Spike",
breed: "Mastiff"
}
Run Code Online (Sandbox Code Playgroud)
反序列化到适当的实例Dog
.我正在努力弄清楚如何编写自定义反序列化器Breed
并将其注册到JSON4S.
您需要编写如下的序列化程序:
串行器:
case object BreedSerializer extends CustomSerializer[Breed](format => (
{
case JString(breed) => breed match {
case "Beagle" => Beagle
case "Mastiff" => Mastiff
case "Yorkie" => Yorkie
}
case JNull => null
},
{
case breed:Breed => JString(breed.getClass.getSimpleName.replace("$",""))
}))
Run Code Online (Sandbox Code Playgroud)
现在,您必须将此序列化程序添加到默认格式.
import org.json4s.CustomSerializer
val serializers = List(BreedSerializer)
implicit lazy val serializerFormats: Formats = DefaultFormats ++ serializers
Run Code Online (Sandbox Code Playgroud)
希望这能解决你的问题.
归档时间: |
|
查看次数: |
4857 次 |
最近记录: |