首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@JSONIgnore属性可以在每个调用的基础上设置吗?

问@JSONIgnore属性可以在每个调用的基础上设置吗?
EN

Stack Overflow用户
提问于 2012-07-12 02:24:15
回答 2查看 19.1K关注 0票数 9

我在一个网站上工作,使用促销代码,潜在地为用户提供免费会员资格的网站。成员注册的级别是促销代码对象的属性,并以int (1或2 )的形式存储在数据库中。但是,成员级别属性与站点的UI相关的唯一时间是与特定促销代码关联的登录页面。因此,对于这种情况,我不希望JSON忽略成员级别。在用户返回站点并拥有与其帐户相关联的促销代码对象后,我们不再关心他们的成员级别,因此我希望JSON忽略成员级别属性。

所以我的问题是,是否可以在每次访问的基础上将对象的属性设置为@JSONIgnore,或者属性只能被忽略或不能被忽略?换句话说,有没有像object.getAttribute().setAttributeJSONIgnore(true | false)这样的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-13 00:22:05

不是的。基于注释的方法是静态的,因为尽管您可以使用自定义AnnotationIntrospector,但由于JsonSerializer实例的构建成本很高,因此会重用它们。

但是有一些方法可以过滤掉属性,例如查看"Filtering Properties“文章。

票数 7
EN

Stack Overflow用户

发布于 2016-10-18 01:02:44

我用JSONViews (http://wiki.fasterxml.com/JacksonJsonViews)做过类似的事情。

您将创建一个基础视图,然后使用PromoPage视图扩展它。在要序列化的对象中,需要向每个属性添加注释。所以你每次都想要出现的是

代码语言:javascript
复制
@JsonView(Views.Base.class) 
String name;

您只想在这些特定的促销页面上显示的属性如下所示

代码语言:javascript
复制
@JsonView(Views.PromoPage.class) 
Integer memberLevel;

然后,如果您使用与其他登录页面不同的JAX-RS方法来获取促销页面,则可以使用适当的视图注释这些方法,如下所示

代码语言:javascript
复制
  @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视图,然后执行如下操作

代码语言:javascript
复制
if (showPromoPage)
    objectMapper.writeValueUsingView(out, object, Views.PromoPage.class);
else
    objectMapper.writeValueUsingView(out, object, Views.Base.class);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11438972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档