Jackson @JsonProperty 注解在 kotlin 数据类中的使用

2024-01-31

科特林 1.2.10 杰克逊模块 kotlin:2.9.0

我在 kotlin 中有以下数据类:

data class CurrencyInfo(
        @JsonProperty("currency_info") var currencyInfo: CurrencyInfoItem?
)

@JsonInclude(JsonInclude.Include.NON_NULL)
data class CurrencyInfoItem(
        @JsonProperty("iso_4217") var iso4217: String?,
        @JsonProperty("name") var name: String?,
        @JsonProperty("name_major") var nameMajor: String?,
        @JsonProperty("name_minor") var nameMinor: String?,
        @JsonProperty("i_ma_currency") var iMaCurrency: Int?,
        @JsonProperty("i_merchant_account") var iMerchantAccount: Int?,
        @JsonProperty("i_x_rate_source") var iXRateSource: Int?,
        @JsonProperty("base_units") var baseUnits: Double?,
        @JsonProperty("min_allowed_payment") var minAllowedPayment: Int?,
        @JsonProperty("decimal_digits") var decimalDigits: Int?,
        @JsonProperty("is_used") var isUsed: Boolean?
)

当我尝试反序列化该数据类时,我得到以下信息:

{"currency_info":{"iso_4217":"CAD","name":"Canadian Dollar","imerchantAccount":0,"ixrateSource":2}}

如您所见,最后两个选项反序列化不正确。 这个问题可以通过直接在 getter @get:JsonProperty 上添加注解来解决。但是,根据杰克逊文档 @JsonProperty 应该分配给 getters/setters/fields

所以,我想问是否有一种可靠的方法来注释 kotlin 中的 jackson 属性,以进行正确的序列化/反序列化(此外,我所有的数据类都是自动生成的,因此很难为 getter 单独创建一些两行/三行注释和二传手)

否则,这个问题可以通过杰克逊的一些设置来解决吗?

根据下面的答案,以下内容对我有用

private val mapper = ObjectMapper().registerKotlinModule()
.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
.setVisibility(PropertyAccessor.CREATOR, JsonAutoDetect.Visibility.NONE)
.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE)
.setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE)
.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE)

@JsonProperty代码中的注释都放在数据类中的私有字段上,默认情况下 Jackson 不会扫描私有字段中的注释。你必须通过放置来指示它做其他事情@JsonAutoDetect注解:

@JsonAutoDetect(fieldVisibility = Visibility.ANY)
data class CurrencyInfo(
    @JsonProperty("currency_info") var currencyInfo: CurrencyInfoItem?
)

或者您可以在访问器方法上移动注释:

data class CurrencyInfo(
    @get:JsonProperty("currency_info") var currencyInfo: CurrencyInfoItem?
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jackson @JsonProperty 注解在 kotlin 数据类中的使用 的相关文章

随机推荐

  • 将 Haskell 线程与内核线程进行比较 - 我的基准测试可行吗?

    这实际上是我的大学项目 在我的文章中 我需要提供证据证明 Haskell 线程的创建速度比普通内核线程更快 我知道最好参考一些研究论文 但重点是我必须自己进行基准测试 这是我的想法 我用 C 使用 pthreads 和 Haskell 编写
  • 错误“HttpServletRequest 引用了缺失的 String 类型”

    我正在 struts 中实现一个项目 其中 JSP 页面出现错误 我已经在 Eclipse IDE 中配置了 Tomcat 6 JRE 和 JDK 6 代码是 request getContextPath 错误是 The method ge
  • PHP 依赖注入

    我正在尝试了解依赖注入 并且在很大程度上我理解它 然而 如果由于某种原因 我的一个类依赖于多个类 而不是将所有这些都传递给构造函数中的这个类 是否有更好 更明智的方法 我听说过 DI 容器 这是我解决这个问题的方法吗 我应该从哪里开始使用这
  • 使用 PHPExcel 读取包含合并单元格的 Excel 工作表

    我想完整地阅读 Excel 工作表并使用 AJAX 将每一行发送到另一个页面进行处理 因此 我使用以下代码将 Excel 工作表数据转换为 JSON 数组 参考库中提供的 PHPExcel 示例
  • 如何使一个方法可用于 Rails 中的控制器和模型?

    我的 Rails 应用程序中有一个私有方法来连接到 Amazon S3 执行传递的代码块 然后关闭与 S3 的连接 看起来是这样 def S3 AWS S3 Base establish connection access key id g
  • Tomcat 中 System.setProperty 的范围

    这个问题是 表弟 这个涉及Android https stackoverflow com questions 4483001 scope of system setproperty 但我们在这里Tomcat环境 如果在我的网络应用程序中我设
  • Asp.net core 2 - 文件未发布

    EDIT 有关信息 我正在 macOS 上使用 VS Code 进行开发 我正在尝试将文件包含在我的发布过程中 当前cshtml这代表我的电子邮件模板 我遵循这个thread https github com dotnet sdk issu
  • 为什么 Spring Boot Batch 作业只运行一次?

    我正在使用弹簧靴 我有一个用这些类实现的批处理作业 我的主要课程是 SpringBootApplication ComponentScan com batch PropertySource classpath application pro
  • C++模板:全局对象中的静态成员未初始化

    我有一段简单的 C 代码 其中我通过专门化模板定义了一个模板和一个全局对象 对象构造函数访问专用模板中的静态成员 但事实证明静态成员此时尚未初始化 但对于本地对象 在函数体内定义 它是有效的 我很困惑 我的c 编译器是 g Ubuntu 5
  • 禁用java中的其他声音

    我用 Java 编写了一个程序 使用 pi4j 库在单击 物理 按钮时发出声音 该程序可以工作 但现在它可以互换地播放所有声音 我希望当您单击 2 3 4 或更多按钮时 您只能听到一种声音 这是我希望对您有所帮助的代码 public cla
  • Eclipse 部署程序集 - 在主项目 WEB-INF/lib 内创建依赖项目的 .war?

    我有一个主要的 Web 项目 其中包含部署和通过浏览器访问页面所需的所有内容 然后我有几个 功能 每个功能都是一个单独的项目 可以包含在主项目中 举个例子 我有MainApp and 函数 reportsApp 当构建这些时ant发生以下情
  • 为什么网络浏览器没有内置 jQuery? [复制]

    这个问题在这里已经有答案了 对我来说这似乎是个好主意 或者向 Javascript 本身添加附加功能 因为它只是众多图书馆之一 它可能很受欢迎 但它远不是唯一的选择 它还会导致它冻结在特定版本上并使改进速度慢得多 另外 无论如何也没有什么优
  • org.apache.commons.fileupload.disk.DiskFileItem 未正确创建?

    我正在尝试使用以下示例中显示的代码 创建 DiskFileItem 时出现 java lang NullPointerException https stackoverflow com questions 4120635 java lang
  • 在 bootstrap daterangepicker 中默认选择“本月”范围

    我正在使用 Bootstrap Daterange Picker 它使用以下范围选项 ranges Today moment moment Yesterday moment subtract 1 days moment subtract 1
  • 如何使用 perl 比较日期?

    我如何使用 Perl 比较以下格式的两个日期 dd mon yyyy hh mm ss GMT 例如 2013 年 5 月 12 日 10 10 20 GMT 我无法安装任何外部 Perl 模块 请指教 如果您有 Perl v5 9 5 或
  • 如何使 StackPanel 或 DockPanel 拉伸以适合 WPF 中的容器?

    我有一个Grid作为定义了两列的根容器 只有一行 第一列具有灵活宽度 第二列具有 300px 固定宽度 接下来 我放置了一个ListBox在第二列内部进行水平和垂直拉伸 即填充整个第二列 最后 我定义了一个项目模板ListBox是一个垂直方
  • 在 Windows 7 上更改程序音量

    我想改变程序的音量 而不是master体积 我现在有以下代码 DllImport winmm dll public static extern int waveOutGetVolume IntPtr hwo out uint dwVolum
  • 导入在 __init__.py 中声明的对象

    我无法理解 init py 中声明的对象如何 应该导入到其他文件中 我有一个像这样的目录结构 top lib init py one py 文件内容如下 lib init py a object 库 one py from lib impo
  • 设置正文宽度(以 px 为单位)?

    如何在 JavaScript 中设置以 px 为单位的正文宽度 必须在 chrome ff 和我们心爱的 ie 中工作 edit 当弹出对话框并且隐藏水平滚动条时必须使用它 然后我必须补偿丢失的16px 否则整个网站会稍微向右移动 也许你有
  • Jackson @JsonProperty 注解在 kotlin 数据类中的使用

    科特林 1 2 10 杰克逊模块 kotlin 2 9 0 我在 kotlin 中有以下数据类 data class CurrencyInfo JsonProperty currency info var currencyInfo Curr