假设我有一个对象,例如具有地址对象列表的业务,以及具有业务的订单。
是否可以进行配置,以便在序列化订单时从业务对象中排除地址列表,而在序列化业务时包含列表?
我正在使用 ajax 为 RIA 提取数据,并且在使用 Order 时我并不真正关心地址数据,但在处理 Business 时我确实想要列表。
我还在使用 Hibernate 进行持久性,所以这确实是一种效率和性能优化。
如果我正确理解问题,是的,我认为杰克逊的JSON 视图会允许这样做。您基本上会为同一类型创建两个不同的视图(配置文件),然后选择哪一个用于序列化。
您可以使用JsonIgnore Annotation忽略序列化中的地址列表,并在序列化Business时关闭ObjectMapper的SerializationConfig中注释的使用。当然,这意味着您可能使用的其他注释也会被忽略。不完美,但您可能会找到一个更好的解决方案,希望它有所帮助(显然)。
ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().disable(Feature.USE_ANNOTATIONS);
是的,你可以做到。您只需要在业务对象中将地址列表声明为临时属性。
然后将以下代码添加到您的 jsonConfig:
jsonConfig.setIgnoreTransientFields(true);
@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"
}