是否可以配置 Jackson-Json Mapper 以根据正在序列化的对象排除属性?

StackOverflow https://stackoverflow.com/questions/2507768

  •  22-09-2019
  •  | 
  •  

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

是否可以进行配置,以便在订单序列化时从业务对象中排除地址列表,而在业务序列化时包含该列表?

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

我还使用 Hibernate 来实现持久性,因此这确实是一种效率和性能优化。

有帮助吗?

解决方案

如果我正确理解问题,是的,我认为 JSON 视图 因为杰克逊会允许这样做。您基本上会为同一类型创建两个不同的视图(配置文件),然后选择使用哪一个进行序列化。

其他提示

你可以使用 Json忽略注释 忽略 地址 序列化中列出并关闭注释的使用 对象映射器序列化配置 当序列化一个 商业. 。当然,这意味着您可能使用的其他注释也会被忽略。并不完美,但您可能会找到更好的解决方案来研究这个问题,希望它有帮助(显然)。

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"
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top