jackson -不要序列化惰性对象

我有一个实体:

@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;

}

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

这是我的ObjectMapper的配置:

Hibernate4Module hm = new Hibernate4Module();

hm.configure(Hibernate4Module.Feature.FORCE_LAZY_LOADING, false);

registerModule(hm);

configure(SerializationFeature.INDENT_OUTPUT, true);

谢谢!

我无法将其标记为JsonIgnore,因为它将永远在序列化框中。有时候,我将需要随书一起检索体裁,到那时,我将在查询中使用“获取联接”,因此它不会为null。

回答:

你可以使用Jackson@JsonInclude批注进行此操作。

根据最新版本的javadoc(目前为2.4),如果字段值为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;

以上是 jackson -不要序列化惰性对象 的全部内容, 来源链接: utcz.com/qa/409766.html

回到顶部