【发布时间】:2018-01-28 22:27:24
【问题描述】:
伙计们!我正在开发一个 Web 应用程序,我决定使用 Jackson 作为我的 JSON 处理框架。
在我愿意发送的请求数据中;假设 POJO 看起来像这样:
data class JSONEnvelope(
@JsonProperty("obj1")
val obj1: Obj1,
@JsonProperty("obj2")
val obj2: Obj2)
像这样被序列化:
{
"obj1":{...},
"obj2":{...}
}
但我需要向该对象添加一些元数据,比如字段meta1 和meta。我以为@JsonAppend 可以解决我的问题,但是我将Jackson 和Jersey 一起使用,所以我没有手动序列化对象,所以我不能使用writer.withAttribute("...", ...)。
我知道this thread,但没有答案可以满足我的需求,因为我认为,为此编写自定义序列化程序有点矫枉过正,而且如果我没有“序列化原始对象的其余部分”。我很高兴有任何想法
【问题讨论】:
-
在这种情况下,“元数据”是什么意思?它可以实现为杰克逊以正常方式映射的简单计算属性吗?
-
@PaulHicks 元数据是指附加字段,因为这个对象是根对象,远程 API 需要指定例如 JSON 版本,所以我想添加字段
"jsonrpc":"2.0".是的,我可以将它作为字段添加到类中,但我认为它不属于那里,因为该信息不是实体状态的一部分。我不知道你所说的计算属性是什么意思 -
计算属性只是没有设置器(或设置器什么都不做)的属性;例如,
val jsonrpc = "2.0"或var time = Date().getTime()。某些属性适用于信封类。如果你不修改JSONEnvelope,那么 JsonAppend 似乎是最好的选择。如果您在调用ObjectMapper.writerFor后无法修改 ObjectWriter,那么您必须事先进行修改,方法是覆盖您使用@Provider提供的 ObjectMapper 中的writerFor方法。 -
@PaulHicks 感谢您的许可!如果您将评论转换为答案,我很乐意接受。我什至没有想过要覆盖
writeFor,谢谢!
标签: java json serialization jackson kotlin