2016-04-18 36 views
0

我有一个春天的API,允许用户使用视图PARAM像这样指定每个呼叫的JsonView:弹簧安置控制器结果包装

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

然后我使用Spring的MappingJacksonValue设置正确观点动态,而不是使用@JsonView()注释,最后我只是回到它产生沿

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

东西线的MappingJacksonValue例如我不能为我的生活弄清楚如何轻松地缠上了我MappingJacksonValue在ObjectNode情况下,这样我可以从代码段更改所有API结果上面这个

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

我使用普通的HashMap <尝试>,但没有奏效 - 序列化完全忽略MappingJacksonValue视图,它也产生Map特异性结果

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

所以有人可以请让我知道什么是实现结果包装在我的情况的最佳方法是什么?

在此先感谢!

回答

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方法仍能正确过滤我的对象。

希望这可以帮助别人。