当前位置: 首页 > 知识库问答 >
问题:

让jackson忽略序列化为json时延迟初始化的字段

陈斌蔚
2023-03-14

我使用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对象上的值不是一个解决方案,因为在其他情况下,我希望包含这些值。

共有1个答案

林正平
2023-03-14

检查Jackson过滤器的Jackson Views(我记得Spring都支持)。

此外,要处理惰性字段(如果它们不被排除),您需要-jackson-mode-hibernate

 类似资料:
  • 首先,我在这个网站上读了一些其他的答案,还有一些关于jackson序列化的答案,但它们都提供了忽略字段的方法。但是,在Java中,不能为。

  • 我有这样一门课: 我知道基于typeToClassId的对象obj是什么类型,不幸的是只有在运行时才知道。 我想基于typeToClassId解析出obj——这里最好的方法是什么?注释似乎已经过时了,基于ObjectMapper的东西似乎是对的,但我很难弄清楚最好的方法可能是什么。 类似于类clazz=lookUpClassBasedOnId(typeToClassId)objectMapper的

  • 问题内容: 我使用以下代码来序列化从外部服务获得的响应,并作为我的服务的一部分返回json响应。但是,当外部服务返回带有时区(10:30:00.000-05.00)的时间值时,杰克逊会将其转换为15:30:00。如何忽略时区值? 问题答案: 您可以创建自定义解串器 告诉杰克逊使用您的自定义解串器 并像这样使用它: 您可以使用Jackson自定义序列化为服务响应添加时区信息

  • 问题内容: 我有这样的课: 我知道哪种类型的对象obj基于typeToClassId,不幸的是仅在运行时才知道。 我想根据typeToClassId解析obj- 最好的方法是什么?注解似乎已经消失了,基于ObjectMapper的东西似乎是正确的,但是我在弄清楚最好的方法是什么时遇到了麻烦。 类clazz = lookUpClassBasedOnId(typeToClassId)objectMap

  • 在这种情况下,如果验证失败,我希望将请求返回给用户,并附上相应的错误消息。我遇到的问题是,我使用Jackson处理JSON请求,验证失败也会导致Jackson无法序列化消息。 例如,如果我有此对象: ...当我去序列化时,字段无效(假设它有11个字符)... ...我得到了一个JsonProcessingException(错误验证对象)。我已经确认一个有效的对象序列化没有问题。所以我的问题是:我

  • 问题内容: 现在,首先,我已经在该站点上阅读了其他答案,以及有关杰克逊序列化的其他答案,但它们都提供了忽略字段的方法。但是,在Java中,不能为。 我正在尝试将Java对象转换为,但忽略任何字段。这适用于字符串,但最终会采用if 值(如果未初始化),因为not 不会被忽略。 谁能对此有所启发? 编辑:为澄清起见,我尝试使用该类作为数据类型,但导致转换为字符串以引发JsonProcessingExc