gpt4 book ai didi

java - jackson - 不要序列化惰性对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:02 26 4
gpt4 key购买 nike

我有一个实体:

@Entity
public class Book {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

@Column
private String title;

@OneToMany(fetch = FetchType.LAZY, mappedBy = ("movie"),cascade = CascadeType.ALL)
private List<Genre> genre;

}

然后我有一个 Controller ,其目的是检索书籍,我的问题是,流派字段包含在我的 Controller 的 json 响应中。有什么方法可以排除在 jackson 序列化对象时延迟加载的那些字段?

这是我的 ObjectMapper 的配置:

Hibernate4Module hm = new Hibernate4Module();
hm.configure(Hibernate4Module.Feature.FORCE_LAZY_LOADING, false);
registerModule(hm);
configure(SerializationFeature.INDENT_OUTPUT, true);

谢谢!

我不能将它标记为 JsonIgnore,因为它将永远脱离序列化框。有时我需要随书一起检索流派,到那时我将在我的查询中使用“fetch join”,这样它就不会为空。

最佳答案

您可以使用 Jackson @JsonInclude 注释来做到这一点。

根据latest version's javadoc (2.4 right now)如果字段值为 null 或空,您可以使用简单的注释指定是否包含带注释的属性。

默认情况下,它是 JsonInclude.Include.ALWAYS,这意味着即使您延迟未加载的值为 null,Jackson 也会包含该属性。

指定不包含空值或 null 值可以显着减小 JSON 响应的大小,并包含所有好处。

如果您想更改此行为,您可以在类级别或单个属性/getterMethod 级别添加注释。

尝试将以下注释添加到您不想包含的字段(如果为空):

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@OneToMany(fetch = FetchType.LAZY, mappedBy = ("movie"),cascade = CascadeType.ALL)
private List<Genre> genre;

关于java - jackson - 不要序列化惰性对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25906985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com