可以配置Jackson-Json Mapper根据它序列化的对象排除属性吗?

时间:2010-03-24 12:57:10

标签: java json jackson

假设我有一些对象,例如带有地址对象列表的业务,以及有业务的订单。

是否可以进行配置,以便在序列化顺序时,它会从Business对象中排除地址列表,并且在序列化业务时它包含列表?

我正在使用ajax为RIA提取数据,在使用Order时我并不关心地址数据,但在处理Business时我确实需要列表。

我也在使用Hibernate进行持久化,因此这实际上是一种效率和性能优化。

4 个答案:

答案 0 :(得分:8)

如果我理解正确的问题,是的,我认为杰克逊JSON Views会允许这样做。 您基本上会为相同类型创建两个不同的视图(配置文件),并选择用于序列​​化的视图。

答案 1 :(得分:5)

您可以使用JsonIgnore Annotation忽略序列化中的地址列表,并在 ObjectMapper SerializationConfig中关闭注释的使用在序列化业务时。当然,这意味着您可能使用的其他注释也会被忽略。不完美,但你可能会找到一个更好的解决方案,希望它有助于(显然)。

ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().disable(Feature.USE_ANNOTATIONS);

答案 2 :(得分:0)

是的,你可以做到。您所需要的只是将业务对象中的地址列表声明为瞬态属性。

然后将以下代码添加到jsonConfig:

jsonConfig.setIgnoreTransientFields(true);

答案 3 :(得分:-1)

@JsonIgnore 

用于忽略您不想转换为json的属性。

public class UserDocument {

    private long id;

    private String documentUrl;

    @JsonIgnore
    private byte documentType;

    //traditional getters and setters
}

输出:这会转换属性 id documentUrl ,但不会转换属性 documentType

{
  "id": 5,
  "document_url": "/0/301115124948.jpg"
}