杰克逊的@JsonAppend有默认值

时间:2017-08-20 21:45:59

标签: java json serialization jackson kotlin

家伙!我正在开发一个Web应用程序,我决定使用Jackson作为我的JSON处理框架。

我愿意发送的请求数据;让我们说POJO看起来像这样:

data class JSONEnvelope(
        @JsonProperty("obj1")
        val obj1: Obj1,

        @JsonProperty("obj2")
        val obj2: Obj2)
像这样序列化的

{
    "obj1":{...},
    "obj2":{...}
}

但我需要向该对象添加一些元数据,让我们说字段meta1meta。我认为@JsonAppend可以解决我的问题,但我和杰克逊一起使用Jackson,所以我没有手动序列化对象,所以我不能使用writer.withAttribute("...", ...)

我知道this thread,但是没有任何答案可以满足我的需求,因为我认为,编写自定义序列化程序对此有点矫枉过正,而且如果我没有机制来& #34;序列化原始对象的其余部分"。我很高兴有任何想法

1 个答案:

答案 0 :(得分:0)

the answer you cited中的解决方案,它将一个mixIn添加到ObjectMapper然后使用ObjectWriter来配置它,这是一个很好的解决方案。

对于调用ObjectMapper.writerFor并因此阻止您调用withAttribute以配置ObjectWriter的Jersey,一种替代方法是在从writerFor返回之前将属性添加到ObjectWriter 。我建议继承ObjectMapper并重写各种writerFor方法,在那时添加必要的属性。然后,您可以通过将其注册为JAX-RS提供程序来使Jersey使用该ObjectMap:请参阅javax.ws.rs中的各种注释以开始此操作。 This answer举例说明了该怎么做。