2015-01-15 7 views
6

null値をシリアライズ/動作していないが、それはまだ私が使用していますシリアル化ヌル@JsonInclude(Include.NON_NULL)は、ジャクソンは、私はクラス/ POJOの上に注釈を配置してもマッパーを設定している

ハイバーネイト4.3.7ファイナルとジャクソン2.4.4。削除しましたゲッターとセッター

@JsonInclude(Include.NON_NULL) 
@Entity 
@Table 
public class School { 

    @Id 
    @GeneratedValue 
    private int id; 

    @OneToMany(cascade=CascadeType.ALL,fetch= FetchType.LAZY) 
    private List<Student> students; 

    @OneToMany(cascade=CascadeType.ALL,fetch= FetchType.LAZY) 
    private List<Employee> staff; 

} 

JSONMapper:

@Component 
public class JSONMapper extends ObjectMapper { 
/** 
    * 
    */ 
    private static final long serialVersionUID = -3131980955975958812L; 

//ref http://blog.pastelstudios.com/2012/03/12/spring-3-1-hibernate-4-jackson-module-hibernate/ 

    public JSONMapper() { 

     Hibernate4Module hm = new Hibernate4Module(); 
     registerModule(hm); 
     configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); 
     configure(SerializationFeature.INDENT_OUTPUT , false); 
     configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false); 
     setSerializationInclusion(Include.NON_NULL); 
    } 
} 

出力:

{"id":1,"students":null,"staff":null} 

答えて

7

ではなくJsonInclude.NON_EMPTYを使用してみてくださいコレクションは怠け者

POJOをロードします。

+0

リストが存在し、そのリストが空であることを示すため、空にする必要があります。しかし、nullはロードされていないことを意味します。基本的には、休止状態のLazyオブジェクトで苦労します。私は代理人を見せたくありません。 –

+0

null値の代わりに常に空のListを使用する必要があります。これは、関連付けられた子がない場合でも、Hibernateは常にプロキシを使用します。つまり、Parentオブジェクトを初めて作成するときにnull値を持つ唯一の時間があることを意味します。 –

2

プロジェクトに対してバグを報告することができます。遅延ロードされたコレクション(特別な処理とデフォルトのオーバーライドが必要なコレクション)の処理が適切な包含チェックを行っていない可能性があります。

関連する問題