注释属性以告诉Jackson在序列化该属性时使用特定的JsonView?

时间:2019-05-27 15:44:56

标签: java json kotlin jackson

想象一下,我有一个类Product,并且我有几种不同的方式想将Product呈现为JSON,因此我为此创建了一些JsonViews:

data class Product(
    @JsonView(Summary::class)
    val sku: String,

    @JsonView(Summary::class)
    val name: String,

    @JsonView(Detailed::class)
    val description: String,

    @JsonView(Detailed::class)
    val colors: Array<String>
)

现在,假设我有一个产品清单,我只想使用它来以摘要形式呈现产品:

data class ProductList(
    val name: String, 
    val products: List<Product> 
)

现在,我当然可以告诉杰克逊使用视图:

objectMapper.writerWithView(Summary::class.java).writeValueAsString(productList);

这很好,但是它要求每次使用ProductList都必须具有此额外的代码。 (我发现)无法告诉杰克逊:

  

ProductList序列化为JSON时,请始终对Summary中的Product实例使用products视图。

当然,我不能用products注释@JsonView,因为这实际上是告诉Jackson仅在视图为Summary时包括产品,但是如果还有其他注释,例如@UseJsonView ...

无论如何-只是确保没有某种方式可以使我丢失。我在示例中使用Kotlin是因为它更紧凑,但如果有Java答案,我非常高兴。

0 个答案:

没有答案