我已經做了類似的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