在序列化对象时,有没有办法定义默认使用哪个JsonView?
我有三个视图,DefaultView,UserView和AdminView。现在,如果我没有专门设置要使用的视图,它将包括默认,用户和管理视图中的所有字段。
我希望它只包含DefaultView中的字段,除非我用@JsonView(UserView.class / AdminView.class)明确标记我的休息端点。
答案 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;
}
}