当前位置: 首页 > 面试题库 >

杰克逊-不要序列化惰性对象

苗烈
2023-03-14
问题内容

我有一个实体:

@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序列化某个流对象(并在之后关闭)?这样地: 使现代化 澄清:我想流式传输内容,而不仅仅是将其序列化到单个String对象。

  • 问题内容: 我有一个杰克逊问题。 有没有一种方法可以反序列化可能具有两种类型的属性,对于某些对象,它看起来像这样 然后对于其他人则显示为空数组,即 任何帮助表示赞赏! 谢谢! 问题答案: Jackson目前没有内置配置来自动处理这种特殊情况,因此必须进行自定义反序列化处理。 以下是这种自定义反序列化的外观示例。 (您可以使用DeserializationConfig.Feature.ACCEPT_

  • 问题内容: 这是我的Java代码,用于反序列化,我正在尝试将json字符串转换为java对象。为此,我使用了以下代码: 和我的product.java类 我收到以下错误。 帮我解决这个问题 问题答案: 似乎您正在尝试从JSON读取一个实际描述数组的对象。Java对象使用花括号映射到JSON对象,但是您的JSON实际上以方括号指定一个数组开始。 您实际拥有的是一个。为了描述泛型类型,由于Java的类

  • 问题内容: 我有一个实体: 然后我有一个控制器,其目的是检索书籍,我的问题是,流派字段包含在控制器的json响应中。有什么办法可以排除杰克逊序列化对象时延迟加载的那些字段? 这是我的ObjectMapper的配置: 谢谢! 我无法将其标记为JsonIgnore,因为它将永远在序列化框中。有时候,我将需要随书一起检索体裁,到那时,我将在查询中使用“获取联接”,因此它不会为null。 问题答案: 你可

  • 问题内容: 我有一个JSON字符串,将标记为而不是。因此,例如,如果我有一个没有子对象的对象,我将收到类似以下的字符串: 我想将其反序列化为Parent类,并将子级正确设置为一个空的子级列表。 对于上述JSON字符串,我想要一个对象,其设置为,而设置为。 我会知道如何在整个课堂上使用注释 然后 但是,我想解决一个从字符串正确实例化List的一般问题: 我能得到类似的东西吗? 问题答案: 几个选择;

  • 问题内容: 我有以下课程- 我正在使用objectMapper.valueToTree(sections)将其转换为JsonNode。但是,当我打印相同的内容时,我仅从Entity类中看到id和name字段,而从Images列表中看不到任何内容。我是否需要添加任何种类的特殊逻辑或注释以确保同时打印列表。 以下是主要课程- 问题答案: 您需要为Entity#images添加getter和setter