8

私は、js MVC フレームワークによって消費される jersey REST サービスの POC に取り組んでいます。フォームの 1 つで、HTML フォームを事前設定するために使用される UserProfile オブジェクト (Jackson によって JSON にシリアル化された) を返す必要があります。フォーム送信時には、フィールドのサブセットのみをサーバーに送信する必要があります (「役割」などの一部のフィールドは読み取り専用で変更してはならないため)。そのため、入力 JSON は UserProfileUpdateRequest オブジェクトにマップされます。サーバーコードのメンテナンスの観点から、UserProfileUpdateRequest は UserProfile のサブセットになるため、これら 2 つのオブジェクトの間に関係を持ちたいと考えています。問題は、UserProfile が jackson によって JSON にシリアライズされるときに、参照された UserProfileRequest インスタンスのすべてのプロパティは、userProfileRequest フィールドにラップされます。これは非常に自然なようですが、JS 関係者には受け入れられません (少なくとも、受け入れられないと言われました)。ジャクソンにルートオブジェクトを「フラット」にし、参照されたオブジェクトのプロパティをルートの下でシリアル化する必要があることを強制する方法はありますか? ちょっとした例

class UserProfileRequest{
private String a;
private String b;
...
}

class UserProfile{
private String role;
...
private UserProfileRequest userProfileRequest;
}

したがって、UserProfile がシリアル化されると、次のようになりました。

{"role":"admin",...,"userProfileRequest":{"a":"...","b":"...",...}}

しかし、取得したい

{"role":"admin",...,"a":"...","b":"...",...}

Jackson 1.9.7 を使用しています。

4

1 に答える 1

21

@JsonUnwrappedアノテーションを探していると思います。

class UserProfile{
    private String role;
    ...
    @JsonUnwrapped
    private UserProfileRequest userProfileRequest;
}

編集: ここに@JsonUnwrapped in Jackson 1.9.9へのリンクがあるため、1.9.7 でも利用できるはずです。

于 2013-03-07T08:59:48.897 に答える