我在一个网站上工作,使用促销代码,潜在地为用户提供免费会员资格的网站。成员注册的级别是促销代码对象的属性,并以int (1或2 )的形式存储在数据库中。但是,成员级别属性与站点的UI相关的唯一时间是与特定促销代码关联的登录页面。因此,对于这种情况,我不希望JSON忽略成员级别。在用户返回站点并拥有与其帐户相关联的促销代码对象后,我们不再关心他们的成员级别,因此我希望JSON忽略成员级别属性。
所以我的问题是,是否可以在每次访问的基础上将对象的属性设置为@JSONIgnore,或者属性只能被忽略或不能被忽略?换句话说,有没有像object.getAttribute().setAttributeJSONIgnore(true | false)这样的方法?
发布于 2012-07-13 00:22:05
不是的。基于注释的方法是静态的,因为尽管您可以使用自定义AnnotationIntrospector,但由于JsonSerializer实例的构建成本很高,因此会重用它们。
但是有一些方法可以过滤掉属性,例如查看"Filtering Properties“文章。
发布于 2016-10-18 01:02:44
我用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);https://stackoverflow.com/questions/11438972
复制相似问题