2011-12-12 29 views
8

元のbeanクラスに注釈を付けることなく、Jackson JSON Viewsなどを使用できる方法はありますか?私は何か似たようなことをさせるために、何らかの種類の実行時/動的設定を探しています。元のbeanクラスに注釈を付けずにJackson JSONビューを使用する

私のbeanは、複数のプロジェクトで共有される可能性のあるJARにパッケージ化された@Entityです。私は、消費するプロジェクトのUIの変更のために、共有されたJARに触れたり再パッケージすることを避けようとしています。

理想的には私は

Bean { 
    @JsonView(View.class) 
    String property1; 

    @JsonView(View.class) 
    String property2; 
} 

任意のアイデアを交換する

jsonViewBuilder = createViewBuilder(View.class); 
jsonViewBuilder.addProperty("property1"); 
jsonViewBuilder.addProperty("property2"); 

ような何かをしたいのですが?

基盤環境:Spring 3.0、Spring MVC、Glassfish 3.1.1。

答えて

12

ミックスイン機能の使用はどうですか?

http://wiki.fasterxml.com/JacksonMixInAnnotations

http://www.cowtowncoder.com/blog/archives/2009/08/entry_305.html


import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; 
import org.codehaus.jackson.annotate.JsonMethod; 
import org.codehaus.jackson.map.ObjectMapper; 
import org.codehaus.jackson.map.SerializationConfig; 
import org.codehaus.jackson.map.annotate.JsonView; 

public class JacksonFoo 
{ 
    public static void main(String[] args) throws Exception 
    { 
    ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY) 
     .configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false); 
    mapper.getSerializationConfig().addMixInAnnotations(Bar.class, BarMixIn.class); 
    mapper.setSerializationConfig(mapper.getSerializationConfig().withView(Expose.class)); 

    System.out.println(mapper.writeValueAsString(new Bar())); 
    // output: {"b":"B"} 
    } 
} 

class Bar 
{ 
    String a = "A"; 
    String b = "B"; 
} 

abstract class BarMixIn 
{ 
    @JsonView(Expose.class) 
    String b; 
} 

// Used only as JsonView marker. 
// Could use any existing class, like Object, instead. 
class Expose {} 
+0

私は 'JsonView' @でミックスインのアノテーションを使用することができますか?これらの例は '@JsonProperty'のみを示しています。 – wrschneider

+0

はい。例を使って答えを更新しました。 –

+0

美しく動作します、ありがとう!今では、すべてのコントローラで繰り返されるのを避けるためにセットアップのものをリファクタリングする方法があるだけです。 – wrschneider

関連する問題