2017-08-22 63 views
1

有沒有一種方法來定義序列化對象時默認使用哪個JsonView?傑克遜默認JsonView序列化

我有三個視圖,DefaultView,UserView和AdminView。現在,如果我沒有專門設置要使用的視圖,它將包含默認,用戶和管理視圖中的所有字段。

我希望它只包含來自DefaultView的字段,除非我用@JsonView(UserView.class/AdminView.class)明確標記了我的休息端點。

回答

0

用於序列化視圖可以用下面的代碼來設置:

objectMapper.setConfig(objectMapper.getSerializationConfig().withView(DefaultView.class)); 

我結束了除去默認視圖。任何屬於專用視圖的字段,我繼續使用@JsonView(UserView.class/AdminView.class)進行註釋。任何我沒有想要序列化的字段都標記爲@JsonIgnore。

我利用以下ObjectMapper配置讓我想要的結果:

@Provider 
public class JacksonContextResolver implements ContextResolver<ObjectMapper> { 
    private final ObjectMapper objectMapper; 

    public JacksonContextResolver() { 
     objectMapper = new ObjectMapper(); 
     objectMapper.setConfig(objectMapper.getSerializationConfig().withView(Object.class)); 
     objectMapper.enable(MapperFeature.DEFAULT_VIEW_INCLUSION);    
    } 

    @Override 
    public ObjectMapper getContext(Class<?> arg0) { 
     return objectMapper; 
    } 
}