想象一下,我有一个类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答案,我非常高兴。