杰克逊默认JsonView for Serialization

时间:2017-08-22 15:49:02

标签: json spring jackson resteasy

在序列化对象时,有没有办法定义默认使用哪个JsonView?

我有三个视图,DefaultView,UserView和AdminView。现在,如果我没有专门设置要使用的视图,它将包括默认,用户和管理视图中的所有字段。

我希望它只包含DefaultView中的字段,除非我用@JsonView(UserView.class / AdminView.class)明确标记我的休息端点。

1 个答案:

答案 0 :(得分:2)

可以使用以下代码设置用于序列化的视图:

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

我最终删除了DefaultView。属于专用视图的任何字段我继续使用@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;
    }
}