ObjectMapper @JsonProperty 不生效问题处理(kotlin)

1 篇文章 0 订阅
1 篇文章 0 订阅

一、问题阐述:

在日常开发中,因为公司业务需求,需要将驼峰格式的属性转换为全大写,但是使用了ObjectMapper后,发现 @JsonProperty 好像不能实现这个功能

有一个非常简单的类:

class Price(
    @JsonProperty("YPRICE")
    val yprice: String? = null,

    @JsonProperty("ZPRICE")
    val zPrice: String? = null
)

把这个类序列化成字符串

val mapper = ObjectMapper().registerKotlinModule()
mapper.writeValue(System.out, Price())

控制台中的结果是:

{"YPRICE":null,"zprice":null}

如果把属性 zPrice 修改为 zprice,则结果更改为:

{"YPRICE":null,"ZPRICE":null}

二、解决方法

在类上添加 com.fasterxml.jackson.annotation.JsonAutoDetect 注解

@JsonAutoDetect(getterVisibility = NONE, fieldVisibility = ANY)
class Price(
    @JsonProperty("YPRICE")
    val yprice: String? = null,

    @JsonProperty("ZPRICE")
    val zPrice: String? = null
)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@JsonProperty 是 Jackson 库中的注解,用于给 Java 对象的属性指定一个不同于属性名的别名,在序列化和反序列化过程中起作用。 如果 @JsonProperty 注解不生效,可能有以下几个原因: 1. 未正确导入 Jackson 库:在使用 @JsonProperty 注解之前,需要确保已经正确导入了 Jackson 库的相关类。可以通过在项目的依赖管理工具(如 Maven 或 Gradle)中添加正确的依赖项来解决此问题。 2. 忘记给属性添加 @JsonProperty 注解:在需要使用 @JsonProperty 注解的属性上,确保已经正确地添加了该注解。例如: ```java @JsonProperty("newPropertyName") private String oldPropertyName; ``` 3. 序列化或反序列化配置错误:Jackson 库提供了多种方式来配置序列化和反序列化行为,包括 ObjectMapper 的配置以及全局配置。如果没有正确配置 Jackson 库的相关参数,@JsonProperty 注解可能不会生效。可以通过检查配置并进行必要的更改来修复此问题。 4. 对象访问修饰符问题:Jackson 默认只序列化公共字段和 getter 方法,如果属性是私有的或者没有相应的 getter 方法,@JsonProperty 注解可能无法生效。可以尝试将属性设置为公共,或者添加相应的 getter 方法。 相关问题: 1. 除了 @JsonProperty 注解外,还有哪些 Jackson 注解可用于控制序列化和反序列化过程? 2. 如何在 Jackson 序列化过程中忽略某个属性? 3. 如何自定义 Jackson 序列化和反序列化的行为? 4. 什么是 Jackson 的 Mixin 注解,如何使用它来修改序列化和反序列化行为? 5. 在 Spring Boot 中如何配置 Jackson 库的属性和行为? 6. 除了 Jackson,还有哪些 Java 序列化库可供选择?它们之间有什么区别?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值