我有一个实体:
@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批注进行此操作。
@JsonInclude
根据最新版本的javadoc(目前为2.4),如果字段值为null或为空,则可以使用简单的注释指定是否包含带注释的属性。
默认情况下为,JsonInclude.Include.ALWAYS这意味着即使你懒惰的未加载值为null,Jackson也会包含该属性。
JsonInclude.Include.ALWAYS
指定不包含空值或null值可以显着减小JSON响应的大小,并具有所有优点。
如果要更改此行为,可以在类级别或单个属性/ getterMethod级别添加注释。
如果为空,请尝试将以下注释添加到不想包含的字段中:
@JsonInclude(JsonInclude.Include.NON_EMPTY) @OneToMany(fetch = FetchType.LAZY, mappedBy = ("movie"),cascade = CascadeType.ALL) private List<Genre> genre;