2016-04-18 70 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方法仍能正確過濾我的對象。

希望這可以幫助別人。