我用 JSONViews ( http://wiki.fasterxml.com/JacksonJsonViews ) 做了类似的事情。
您将创建一个基本视图,然后使用 PromoPage 视图对其进行扩展。在您正在序列化的对象中,您需要将注释添加到每个属性。所以你每次都想出现的是
@JsonView(Views.Base.class)
String name;
您只想在某些促销页面上显示的属性类似于
@JsonView(Views.PromoPage.class)
Integer memberLevel;
然后,如果您有不同的 JAX-RS 方法来获取促销页面而不是其他登录页面,您可以使用适当的视图注释这些方法,如下所示
@JsonView(Views.Base.class)
@GET
@Produces(MediaType.APPLICATION_JSON )
public Object getNormalLandingPageInfo() {
...
}
@JsonView(Views.PromoPage.class)
@GET
@Produces(MediaType.APPLICATION_JSON )
public Object getPromoLandingPageInfo() {
...
}
如果你不这样做,在你的逻辑中,你可以做任何你想做的事情来确定何时显示 PromoPage 视图,然后做这样的事情
if (showPromoPage)
objectMapper.writeValueUsingView(out, object, Views.PromoPage.class);
else
objectMapper.writeValueUsingView(out, object, Views.Base.class);