0

ユーザーが次のようにビューパラメーターを使用して各呼び出しの JsonView を指定できるようにする Spring API があります。

/api/v1/person/1?view=viewName

次に、Spring の MappingJacksonValue を使用して、アノテーションを使用する代わりに正しいビューを動的に設定し@JsonView()、最後に、次の行に沿って何かを生成する MappingJacksonValue インスタンスを返します。

[
    { id: 1 },
    { id: 2 }
]

上記のスニペットからすべての API の結果をこれに変更できるように、MappingJacksonValue インスタンスを ObjectNode に簡単にラップする方法を理解することはできません。

{
    "data" : [
        { id: 1 },
        { id: 2 }
    ]
}

通常の HashMap<> を使用してみましたが、うまくいきませんでした - シリアル化は MappingJacksonValue ビューを完全に無視し、マップ固有の結果も生成します

{
    data: {
        value: [],
        serializationView: "com.blah.models.view.View$Id",
        filters: null,
        jsonpFunction: null
    }
}

それで、誰かが私のシナリオで結果のラッピングを達成するための最良の方法を教えてもらえますか?

前もって感謝します!

4

1 に答える 1

1

誰かが同じことをしようとしてこの投稿に出くわした場合、私は問題を間違った方法で見ていることに気づきました. 最終的に ServiceResponse クラスを作成し、そこにオブジェクトをラップしました

public class ServiceResponse {

    @JsonView(View.Id.class)
    private Object data;

    public ServiceResponse (Object data) {
        this.data = data;
    }
}

したがって、本質的に戻る代わりに、new MappingJacksonValue(someReturnObject)私は戻ってきnew MappingJacksonValue(new ServiceResponse(someReturnObject))ます。dataこのようにして、すべてがJSON オブジェクトに適切にラップされ、setSerializationViewメソッドは引き続きオブジェクトを適切にフィルタリングします。

これが誰かに役立つことを願っています。

于 2016-04-19T11:15:17.040 に答える