2016-11-14 6 views
0

私は、List of GameFieldクラスを含むSaveクラスを持つプロジェクトを作っています。 "Save"をDBに保存する(Hibernateを使用)。Json @JsonIgnore。どのように深く無視するのですか?

私はJSONを使用していますが、かなりうまくいきますが、GameFieldのすべてのフィールドを解析しているため、Json Stringは約600文字になります。 Beacuseが長すぎるため、Stringのサイズが大きすぎると言うorg.hibernate.exception.DataExceptionが発生しています。

大きな文字列を適切に格納するためにデータベース内に使用可能な領域を増やそうとしていましたが、うまく機能しませんでした。

私は@JsonIgnoreと@JsonIgnorePropertiesというアノテーションがあるため、Jsonがいくつかのフィールドを解析するのを止めることができました。それはGameFieldのためではなくSaveクラスのためだけに機能しました。

Jsonが私が必要とするフィールドを解析するのを防ぐことはできますか?ここで

保存クラスです:

public class Save { 
    private List<GameField> fields; 
    // getters setters , etc. 
} 

ゲーム・フィールド:コードを解析する

public class GameField { 

    @JsonIgnore 
    private boolean isSet; 

    private char fieldSign; 

    @JsonIgnore 
    private final int numberInArray; 
} 

フラグメント:

public String getEncodedSaveInString(Save save) throws JsonProcessingException { 
    mapper = new ObjectMapper(); 
    return mapper.writeValueAsString(save); 
} 

Userクラスのワンピース

@Entity 
    public class User { 
    @Column(name = "Save") 
    private Save save; 
} 

解決策はありますか?

+0

正常に動作しますか'@ JsonIgnoreProperties'です。 – Gregg

+0

これを修正しました。私も@JsonIgnoreProperties({"isSet"、 "numberInArray"})で試していましたが、影響はありません。 –

+1

私はとてもうまく動作する非常に似たコードを持っています。 com.fasterxml.jackson.annotation'の注釈を使用していますか? – Gregg

答えて

0

私は解決策を見つけました。私がする必要があったのは、フィールドセッターの上に@JsonIgnoreアノテーションを置くことでした。フィールド自体の上にそれを配置すると、コードの

ワーキングサンプル働いていませんでした。

private Foo foo; 

@JsonIgnore 
public void setfoo(Foo newFoo){ this.foo = newFoo;} 

私はあなたがJsonIgnore` @ `使用し、あなたの例では、任意のコードが表示されていない:)

関連する問題