Spring 用 JsonView / MappingJacksonValue 包装 rest 控制器结果

Spring rest controller result wrapping with JsonView / MappingJacksonValue

我有一个 Spring API 允许用户使用视图参数指定每个调用的 JsonView,如下所示:

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

然后我使用 Spring 的 MappingJacksonValue 来动态设置正确的视图,而不是使用 @JsonView() 注释,最后我只是 return MappingJacksonValue 实例,它产生了一些东西

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

我这辈子都想不出如何轻松地将我的 MappingJacksonValue 实例包装在一个 ObjectNode 中,以便我可以将上面代码片段中的所有 API 结果更改为这个

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

我尝试使用常规的 HashMap<>,但这没有用 - 序列化完全忽略了 MappingJacksonValue 视图,它还会生成特定于 Map 的结果

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

有人可以告诉我在我的场景中实现结果包装的最佳方法是什么吗?

提前致谢!

如果有人遇到这个 post 想做同样的事情,我意识到我以错误的方式看待问题。我最终创建了一个 ServiceResponse class 并像这样

将对象包裹在那里
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 方法仍然正确地过滤我的对象。

希望这对某人有所帮助。