【问题标题】:Have jackson ignore fields that are lazy initialized when serializing to json让杰克逊忽略在序列化为 json 时延迟初始化的字段
【发布时间】:2013-03-01 23:03:20
【问题描述】:

我使用 Spring 并正在创建一个 REST 服务。

这是我的控制器的一部分:

@RequestMapping("/get")
public @ResponseBody Person getPerson() {
    Person person = personRepository.findOne(1L);
    //(1) person.setRoles(null);
    return person;
}

此人的角色是惰性初始化的,当时不需要。当 (1) 被注释掉时,一切都会失败,并带有

org.springframework.http.converter.HttpMessageNotWritableException: 无法写入 JSON:未能延迟初始化集合 角色:no.something.project.Person.roles,无法初始化代理 - 没有会话等。

我可以通过执行 (1) 来解决这个问题,手动将其设置为 null(或其他值),因此当 Jackson 尝试序列化我的对象时它不会失败。

但是,这很烦人,必须在不同的地方多次完成。我想要一些简单的解决方案,在未初始化时忽略那些延迟初始化的字段,或者将它们设置为 null。

注意:@JsonIgnore 对象上的值不是解决方案,因为在其他情况下我希望包含这些值。

【问题讨论】:

    标签: json spring spring-mvc jackson


    【解决方案1】:

    检查Jackson Views 以获得Jackson Filters(我记得两者都受Spring 支持)。

    此外,要使用惰性字段(如果不排除它们),您需要 - jackson-module-hibernate

    【讨论】:

    • 如何在 Spring 中使用 jackson-module-hibernate? wiki 上的代码遗漏了一些东西。
    • @Matsemann 我在这里得到了解决方案并提供了工作代码:stackoverflow.com/questions/21708339/…
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2021-04-26
    • 2014-06-22
    • 2018-08-16
    相关资源
    最近更新 更多