假设我有一些对象,例如带有地址对象列表的业务,以及有业务的订单。
是否可以进行配置,以便在序列化顺序时,它会从Business对象中排除地址列表,并且在序列化业务时它包含列表?
我正在使用ajax为RIA提取数据,在使用Order时我并不关心地址数据,但在处理Business时我确实需要列表。
我也在使用Hibernate进行持久化,因此这实际上是一种效率和性能优化。
答案 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"
}