Can the property @JSONIgnore be set on a per call basis?

jackson, java, json

Solution

No. Annotation-based approaches are static, since although you could use custom `AnnotationIntrospector`, resulting `JsonSerializer` instances are reused since their construction is costly.

But there are ways to filter out properties, check out "Filtering Properties" article, for example.

Problem

I am working on a site that uses promo codes to potentially provide users free memberships to the site. The level that a member signs up at is an attribute of a promo code object and stored in the database as an int, either 1 or 2. However, the only time the member level attribute is relevant to the UI of the site is for a landing page associated with a specific promo code. So for that case, I don't want the member level to be ignored by JSON. After a user returns to the site and has a promo code object associated with their account, we no longer care about their member level so I would like the member level attribute to be ignored by JSON. So my question is this, is it possible to set an object's attribute to `@JSONIgnore` on a per access basis, or can an attribute only be ignored or not ignored? In other words is there a method like `object.getAttribute().setAttributeJSONIgnore(true | false)`?

Original source