I need to the ignore the serialization (JSon/Jackson and XML/XStream) of some attributes from my object response based on user input/or Spring security roles (like you don't have permission to see the content of this field, but all others are ok etc). How is the best approach to do this in Spring MVC Rest? Other approach is show only the attributes that are relevant for the api user, like described here http://googlecode.blogspot.com.br/2010/03/making-apis-faster-introducing-partial.html
質問する
2939 次
1 に答える
1
Jackson を使用している場合、Json シリアライゼーションを変更するためのいくつかのオプションを以下に示します。
@JsonIgnoreアノテーションを使用します- ただし、これは静的フィルタリングであり、必要に応じてルールベースのフィルタリングを実装することはできません
@JsonFilterを使用- これにより、シリアライゼーション フィルタリング ロジックを提供できるインターフェイスを実装できます。これはソリューションとしては重すぎると感じるかもしれません。
私がよくこれを解決する方法は、基になるオブジェクトではなく、Controller メソッドから Map を返すことです。関連するフィールドをオブジェクトからマップに配置する処理コードを記述できるため、シリアル化されるものを完全に制御できます。オブジェクトに変換を行うメソッドを含めることができます。メソッドは次のようになります。
// 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 }
于 2012-09-26T23:13:16.450 に答える