码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Jackson 的 SNAKE_CASE 反序列化


    最近项目中有关 JSON 的序列化和反序列化中,我们遇到了一个问题就是 category_id 我们在定义对象的时候使用的是 categoryId。

    当程序进行反序列化的时候,我们获得的对象值为 NULL。

    这是因为 jackson 提供了一个命名规则,如果你是希望进行这种类型的映射的话,那么需要把命名映射规则设置为:SNAKE_CASE

    objectMapper 对象初始化的时候设置

    有 2 种设置方法,如果你希望你在 objectMapper 对象初始化的时候进行设置,那么需要添加下面的代码:

    1. objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    2. objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);

    那么这样,我们就等于告诉 objectMapper 在对对象进行序列化和反序列化的时候,使用 SNAKE_CASE 命名方式。

    @JsonNaming 注解

    可以在直接需要进行序列化和反序列化的类中使用:

    @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)

    上面的代码就可以了。

    这样的意思就是不管是不是全局设置了命名规则,只要用到了这个类的序列化和反序列化都会使用上面的规则来进行字段映射。

    2023-10-06_12-36-42

    那种方式更好

    对我们当前的项目来说,我们可能更加倾向使用注解的方式。

    需要知道的是 objectMapper 对象的初始化可能在不同的服务类中被初始化多次。

    当然如果你使用的是 Spring 的配置文件,那么可以一次配置完成。

    延伸阅读

    Jackson 中的配置方式,不仅仅只有上面我们提到的,还有下面的几种方式。

    SNAKE_CASE:所有字母均为小写,并在名称元素之间使用下划线作为分隔符,例如 snake_case。

    UPPER_CAMEL_CASE: 所有名称元素,包括第一个,都以大写字母开头,后跟小写字母,并且没有分隔符,例如 UpperCamelCase。

    LOWER_CAMEL_CASE: 所有名称元素,包括第一个,都以小写字母开头,后跟小写字母,并且没有分隔符,例如 UpperCamelCase。

    这个配置方式是默认的配置方式。

    LOWER_CASE:所有字母均为小写字母,没有分隔符,例如 lowercase。

    KEBAB_CASE:名称元素之间用连字符分隔,例如 kebab-case。

    LOWER_DOT_CASE:所有字母均为小写字母,用点连接字符,例如 lower.case。

    2023-10-06_12-50-04

    根据 Java 和 Json 的命名规范来说,其实大家都有点乱命名,但对一些比较规范的项目,通常单词之间我们使用下划线多。

    我们并不太使用横杠的方式来处理命名。

    所以,很多时候,你可能需要使用 SNAKE_CASE 来标记你的命名规则。

    Jackson 的 SNAKE_CASE 反序列化 - Java - iSharkFly

  • 相关阅读:
    Go微服务框架go-kratos实战03:使用 gorm 实现增删改查操作
    win10打开VMware 16 pro里面的虚拟机就蓝屏怎么办
    比React—Redux和Redux好用100倍的原子级状态管理器,是我们公司自己封装的npm包,如果感兴趣可以研究研究,会大大提高开发效率
    双指针算法_移动零_
    offline RL | 读读 Decision Transformer
    PHP:类的自动加载
    【老板要我啥都会】前端升全栈系列 项目安全
    2022亚太数学杯数学建模竞赛A题(思路分析......)
    msvcp120.dll丢失怎么办?(五种方法快速解决)
    【看球和学Go】错误和异常、CGO、fallthrough
  • 原文地址:https://blog.csdn.net/huyuchengus/article/details/133626901
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号