1

私のアプリには Serie があり、それぞれにテクスチャと .obj ファイルを表す 2 つのフィールドがあります。

@Entity
public class Serie extends Model {
    public File obj;
    public File texture;
}

そして私のファイルクラス:

@Entity
public class File extends Model{
     public String path;
}

オブジェクトを記述する Json ファイルを生成したいと考えています。ご覧のとおり、File クラスにはフィールドが 1 つだけあります。そのため、JsonArray を使用せずに Json を生成して、ファイル フィールドを記述したいと考えています。

Jackson ライブラリを使用して、次のような json を生成します。

{"obj":{"path":"obj/600s"}, "texture":{"path":"text/600s"}}

私はそのように生成したいと思います:

{"obj":"obj/600s", "texture":"text/600s"}

部分的に機能するオプションの 1 つは、Jackson の注釈 @JsonUnwrapped を使用することです。

@Entity
public class Serie extends Model {

    @JsonUnwrapped
    public File obj;

    public File texture;
}

それを使用して、Jackson は次のような json を生成します。

    {"path":"obj/600s", "texture":{"path":"text/600s"}}

obj、テクスチャ フィールドには使用できず、フィールドの名前を json に保存したいので、これはうまくいきません。

私はそれが特定の質問であることを知っています。いずれにせよ、事前に感謝します

4

3 に答える 3

2

目標を達成するためにカスタム ゲッターを作成できます。

public class Serie extends Model {
    public File obj;
    public File texture;

    @JsonProperty("obj")
    public String getObjPath() {
        return obj.path;
    }

    @JsonProperty("texture")
    public String getTexturePath() {
        return texture.path;
    }
}

/ 自動検出はオフになっていると思います /

于 2013-03-29T13:23:58.190 に答える
1

代わりに使用したいのは @JsonValue ですが、アノテーションはフィールドに設定できず、メソッド (ゲッター) にのみ設定できます。

@Entity
public static class File {
    public String path;

    @JsonValue
    public String getPath() {
        return path;
    }

}

シリアル化だけが必要な場合は、これで十分です。逆シリアル化も必要な場合は、json がデータを逆シリアル化できるように、単一引数の文字列コンストラクターまたは静的ファクトリ メソッドが必要になります。

于 2013-03-28T18:01:47.670 に答える