2012-09-26 69 views
2

我需要忽略基於用戶輸入/或Spring安全角色的對象響應中的某些屬性的序列化(JSon/Jackson和XML/XStream)(例如,您無權查看此字段的內容,但所有其他人都沒問題等)。如何在Spring MVC Rest中做到這一點? 另一種方法是隻顯示相關的API的用戶,喜歡這裏http://googlecode.blogspot.com.br/2010/03/making-apis-faster-introducing-partial.htmlSpring MVC Rest:如何在Json和XML中實現部分響應?

回答

1

描述如果使用的是傑克遜,這裏是一些可能的選項來修改JSON序列化的屬性:

  1. 使用@JsonIgnore註釋 - 然而,這是靜態的過濾,並且不會讓你因爲你看起來需要

  2. 使用@JsonFilter實現基於規則的過濾 - 這將讓你實現一個接口,可以在其中提供喲你的序列化過濾邏輯。你可能會發現這個解決方案太重了。

  3. 我經常解決這個問題的方法是從我的Controller方法而不是基礎對象返回一個Map。您可以編寫處理代碼,將對象中的相關字段放入Map中,因此可以完全控制序列化的內容。您可以在Object上包含一個方法來進行轉換。該方法可以是這個樣子:

    // RequestObj is whatever 'input' object that indicates what should be filtered 
    public Map<String,Object> convertToMapForRequest(RequestObj request){ 
        // Build return map based on 'this' and request 
    } 
    
+1

感謝@馬特,但這種方法只適用於JSON和XML不輸出,並返回地圖<字符串,對象>是過於抽象,這樣做我將失去回報的語義。我會繼續尋找更好的解決方案並讓你知道。 –

+0

現在我把註釋放在我的課上 @JsonSerialize(include = JsonSerialize.Inclusion.NON_DEFAULT) public class MyClass {} 並將我不喜歡的值設置爲Null。 (在Spring中默認的xml行爲不是打印空值) –

+0

@ wandi.darko你有沒有找到一個很好的方法來做到這一點?我一直在尋找一個好方法,除了瑜伽https://github.com/skyscreamer/yoga圖書館,我還沒有找到任何可行的方法。 – Seagull

相關問題