【问题标题】:Spring rest controller result wrapping with JsonView / MappingJacksonValue使用 JsonView / MappingJacksonValue 包装 Spring 休息控制器结果
【发布时间】:2016-04-18 10:44:06
【问题描述】:

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

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

然后我使用 Spring 的 MappingJacksonValue 动态设置正确的视图,而不是使用 @JsonView() 注释,最后我只返回 MappingJacksonValue 实例,该实例产生类似于

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

我一辈子都想不通如何轻松地将 MappingJacksonValue 实例包装在 ObjectNode 中,以便我可以将上面 sn-p 中的所有 API 结果更改为此

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

我尝试使用常规的 HashMap 但这不起作用 - 序列化完全忽略 MappingJacksonValue 视图,它还会产生特定于 Map 的结果

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

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

提前致谢!

【问题讨论】:

    标签: json spring jackson spring-web


    【解决方案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 方法仍然可以正确过滤我的对象。

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2018-07-31
      相关资源
      最近更新 更多