我已经做了类似的JSONViews(http://wiki.fasterxml.com/JacksonJsonViews)。
您将创建一个基本视图,然后使用PromoPage视图对其进行扩展。在要序列化的对象中,您需要将注释添加到每个属性。所以,你要的那些出现每次将
@JsonView(Views.Base.class)
String name;
要只显示那些特定的促销页面会像
@JsonView(Views.PromoPage.class)
Integer memberLevel;
然后,如果你有不同的JAX-RS方法的性质用于获取promopages比其他的登陆页面,你可以注释,象这样
@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);
参见:http://stackoverflow.com/questions/11232045/serialization-and-deserialization-with-jackson-how-to-programmatically-ignore -f/11233190#11233190。您无法在运行时选择性地打开/关闭'@ JsonIgnore'。 – pb2q 2012-07-11 18:27:48
很高兴知道。欢呼声 – EJay 2012-07-11 18:31:20
我认为这个问题表明应用程序业务逻辑被放在错误的地方。我建议让数据序列化/反序列化(传输)层尽可能愚蠢,并将业务逻辑放在人们期望的地方,在哪里更容易维护。 – 2012-07-12 17:50:31