![](/img/trans.png)
[英]JSON: Make Jackson only serialise fields that were explicitly set for an object
[英]Jackson Serialise a Scala Set
我有一個與fasterxml jackson有關的問題,涉及在序列化帶有集的scala類Genre作為字段Set [Type]之一的情況下,其中Type是具有單個參數值的案例類
class Type(val value: String) extends AnyVal
case class Genre(name: String, types: Set[Type])
當我嘗試序列化它時,它會給出類似
{"genre":{"name":"xxxxxx","types":[{"value":"aaaaa"}, {"value":"bbbb"}, {"value":"ccccc"}]}}
但是我不希望生成的json包含該類的參數名稱,並且它應該僅包含參數值。 它應該看起來像是逗號分隔的值[“ aaaaa”,“ bbbb”,“ ccccc”] ,例如
{"genre":{"name":"xxxxxx","types":["aaaaa","bbbb","ccccc"]}}
有沒有辦法使用傑克遜序列化一組僅包含值而不是參數名稱的類?
我的映射器看起來像這樣
private val mapper = new ObjectMapper
mapper.registerModule(DefaultScalaModule)
提前致謝 !
它應該看起來像是逗號分隔的值[“ aaaaa”,“ bbbb”,“ ccccc”]
那是Set[String]
,但是您擁有的是Set[Type]
。 傑克遜(Jackson)確實在做應該做的事情。 您需要將課程簽名更改為:
case class Genre(name: String, types: Set[String])
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
object TestObject {
def main(args: Array[String]): Unit = {
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val genre = Genre("xxxxxx", Set(new Type("aaaaa"), new Type("bbbb"), new Type("ccccc")))
println("Genre: " + mapper.writeValueAsString(genre))
val anotherGenre = AnotherGenre("xxxxxx", Set("aaaaa", "bbbb", "ccccc"))
println("AnotherGenre: " + mapper.writeValueAsString(anotherGenre))
}
}
class Type(val value: String) extends AnyVal
case class Genre(name: String, types: Set[Type])
case class AnotherGenre(name: String, types: Set[String])
輸出:
Genre: {"name":"xxxxxx","types":[{"value":"aaaaa"},{"value":"bbbb"},{"value":"ccccc"}]}
AnotherGenre: {"name":"xxxxxx","types":["aaaaa","bbbb","ccccc"]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.