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

杰克逊(Jackson)不变龙目岛注释课

林和煦
2023-03-14
问题内容

创建类的首选方法是

  • 一成不变的
  • 可以使用Jackson进行序列化/反序列化
  • 易于阅读且样本量低

最好是,我希望这样的工作:

@Data(onConstructor = @__(@JsonCreator))

然后将所有字段都设为private final。但是,它甚至不编译(我不确定为什么)。使用

@AllArgsConstructor(onConstructor = @__(@JsonCreator))

编译但仅产生

InvalidDefinitionException: No serializer found for class

问题答案:

添加 ConstructorProperties

  • 用以下行在适当的位置创建lombok.config文件: lombok.anyConstructor.addConstructorProperties = true
  • @Value向您的班级添加lombok 批注以使其不可变

然后,Jackson的序列化和反序列化将按预期工作。

该方法:

  • 符合标准
  • 比以前的最佳答案具有更少的锅炉空间
  • 适用于v1.16.20(2018年1月9日)及更高版本

编辑:2020-08-16

  • 注意:使用@Builderwith将@Value导致该解决方案失败。(感谢下面来自@ guilherme-blanco的评论。)但是,如果您还添加例如,@AllArgsConstructor它仍然可以按预期运行。


 类似资料:
  • 处理注释 mixin 的杰克逊代码是否可以由第三方重用来混合非杰克逊注释? 处理混合蛋白的核心杰克逊类是什么?

  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • 我们使用spring boot 2.1.5和starter parent作为pom依赖项。 Spring启动使用默认的日志回馈进行日志记录,我们尚未显式切换到Log4j2或更改任何配置。下面是我们的项目依赖关系树。 我们的项目中有很多lombok@log4j2注释。但是,我们在依赖关系树中发现我们没有任何log4j2-core jar依赖项(发现它容易受到最近log4j问题的影响)。 lombok

  • 我环顾四周,不认为这是其中任何一个的复制品: 在《野蝇》中使用杰克逊注释 杰克逊注释被忽略 野蝇和杰克逊@JsonIgnore注释 使用野蝇10并部署具有以下类的战争: 如果构造函数未被注释,我会在部署时看到该构造函数中引发的异常,但在向 REST 服务发出请求时,我看不到 方法中的异常。 我在实体上有一个注释,它不起作用,我使用的注释也不起作用 该类如下所示(包括导入,以验证我使用的是 com.

  • 问题内容: 我用我的代码自动生成和代码。我想添加其他个人并使用它。 例如,我想添加一个方法来验证列表中键的存在: 创建注释后,我将只需要执行以下操作: 问题答案: 一般注意事项 如果您已经在使用Lombok,则可以添加自定义Lombok转换批注和处理程序。 使用和定义存在注释 创建一个处理程序 public class HandleExists extends JavacAnnotationHan

  • 问题内容: 我试图通过使用以下(简化)代码从序列化中筛选出某些字段: 我们使用的我一直期望创建的序列化Json字符串仅包含,但是我得到了。 如何创建一个尊重指定过滤器的临时编写器(在我的情况下,无法重新配置ObjectMapper)。 注意:由于我的应用程序中的使用场景,我只能接受不使用Jackson批注的答案。 问题答案: 通常,您可以对您的类进行注释以应用过滤器: 您已指定不能在类上使用批注。