记一次springboot的@RequestBody json值注入失败的问题(字段大小写的问题)

news2024/10/7 6:43:23

有时候做后端开发时,难免会与算法联调接口,很多算法的变量命名时全部大写,在实际springmvc开发中会遇到无法赋值的问题。

先粘贴问题代码

entity类

@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class EyeRequest extends CommonRequest {

    private Integer PRECLOSE;

    private Integer MDEC;

    private Integer BF;

    private Integer MAR;

    public EyeRequest(Integer timestamp, Integer PRECLOSE, Integer MDEC, Integer BF, Integer MAR) {
        super(ResponseConstant.EYE_TYPE, timestamp);
        this.PRECLOSE = PRECLOSE;
        this.MDEC = MDEC;
        this.BF = BF;
        this.MAR = MAR;
    }
}

controller类

@PostMapping("/uploadMouseEyeMove")
public CommonResponse uploadMouseEyeMove(@RequestBody EyeRequest eyeRequest) {
    log.info("eyeRequest:{}",eyeRequest);
    return callBackService.uploadMouseEyeMove(eyeRequest);
}

请求的body

{
    "PRECLOSE": 1,
    "MDEC": 1,
    "BF": 1,
    "MAR": 1,
    "timestamp": 1111
}

在使用中发现字段没有被赋值

eyeRequest:EyeRequest(super=CommonRequest(type=null, timestamp=1111), PRECLOSE=null, MDEC=null, BF=null, MAR=null)

反复比对json的字段和java的字段,发现没有错误,debug源码,将断点打在log的那一行,首先,springmvc的请求数据统一由HttpMessageConverter这个接口处理,查看这个类的结构

不难推测出,应该是使用read的方法进行赋值

注释也证明了这一点,查看该类的实现类不难发现

springboot是默认采用Jackson实现的,点击进入,查看read的方法

第一个方法可以忽略,看方法名应该是获取Java的类的全路径,进入下面的方法后

进入ObjectMapper类中

debug到这里

tips:可以通过在抽象方法打断点,ide会自动进入实现

195行步入

377行步入

进入方法后发现所有的字段均为小写,我是用@Data,反编译源码后发现并不相符

排查问题后发现springmvc在解析json时默认使用的解析工具时Jackson框架,Jackson会使用java约定的变量命名法,所以当全是大写字母的字段的时候在生成值得时候会出异常。

解决方案:

使用@JsonProperty注解重命名,上面的entity

@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class EyeRequest extends CommonRequest {

    @JsonProperty(value = "PRECLOSE")
    private Integer preclose;

    @JsonProperty(value = "MDEC")
    private Integer mdec;

    @JsonProperty(value = "BF")
    private Integer bf;

    @JsonProperty(value = "MAR")
    private Integer mar;

    public EyeRequest(Integer timestamp, Integer preclose, Integer mdec, Integer bf, Integer mar) {
        super(ResponseConstant.EYE_TYPE, timestamp);
        this.preclose = preclose;
        this.mdec = mdec;
        this.bf = bf;
        this.mar = mar;
    }
}

重新启动后可以成功赋值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1044748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux命令之chattr命令

一、chattr命令简介 chattr命令用于更改文件或目录的属性,包括不可修改属性、同步属性、追加属性、无尽属性、压缩属性、无尽属性、不可删除属性等。chattr命令只能由超级用户或文件的所有者使用。 二、chattr命令使用示例 1、给文件设置版本 -v参数设置版本信息只…

数据库备份的几种方式

数据已成为当今数字时代公司的主要资产。然而,数据的安全性和完整性也成为企业经营的主要挑战。数据库备份对于维护这些宝贵的数据尤为重要。本文将详细介绍几种比较常见的数据库备份方式,帮助用户掌握如何有效地保护数据,保证业务的可持续发…

linux使用操作[1]

文章目录 版权声明快捷键ctrl c 强制停止ctrl d 退出、登出history命令光标移动快捷键清屏快捷键 软件安装命令常见linux系统包管理器yum命令apt命令 systemctl命令软连接日期&时区修改linux时区ntp程序 IP地址&主机名ip&主机名域名解析win配置主机名映射虚拟机…

Mysql003:基础查询

目录: 1. 基本查询 2. 条件查询(where) 3. 聚合函数(count、max、min、avg、sum) 4. 分组查询(group by) 5. 分组后查询(having) 6. 排序查询(order by&#…

【空间-光谱联合注意网络:多时相遥感图像】

A Spatial–Spectral Joint Attention Network for Change Detection in Multispectral Imagery (一种用于多光谱图像变化检测的空间-光谱联合注意网络) 变化检测是通过比较双时相图像来确定和评估变化,这是遥感领域的一项具有挑战性的任务…

Wireshark抓包分析ICMP协议

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 分析目的:分析ICMP协议的数据格式、报文…

【赠书活动】无测试组织:测试团队的敏捷转型

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

不可忽视的字符函数与字符串函数:它们如何改变你的编程世界

💓博客主页:江池俊的博客⏩收录专栏:C语言进阶之路👉专栏推荐:✅C语言初阶之路 ✅数据结构探索💻代码仓库:江池俊的代码仓库🎉欢迎大家点赞👍评论📝收藏⭐ 文…

苹果恢复出厂设置怎么操作?方法在这!

手机恢复出厂设置,简单点来说就是将手机恢复到出厂时的默认状态。如果在使用手机的过程中遇到内存不足、系统闪退、应用卡顿等问题,可以尝试通过将手机恢复出厂设置来解决问题。那么,苹果恢复出厂设置的方法是什么?还不知道如何操…

API接口自动化测试框架

前言 接口自动化逐渐成为各大公司投入产出最高的测试技术。但是如何在版本迅速迭代过程中提高接口自动化的测试效率,仍然是大部分公司需要解决的问题。 框架定位 数据驱动设计模式,无需写测试代码脚本即可实现自动化等价类非等价类覆盖, E2E…

浅谈如何预防高层小区电气火灾的发生

【摘要】:随着国民经济的发展和人民生活水平的不断提高,我国工业用电和家庭用电量逐年增加。电气火灾造成的人员伤亡和财产损失巨大,时刻威胁着人们的生命及财产安全。众所周知,因供电线路或用电设备的损坏引发的接地电气火灾的例…

Seata入门系列【2】Spring Cloud 2021.0.5集成seata 1.7.1

1 引出分布式事务问题 1.1 seata-service-account编写查询用户、远程调用下订单接口 RestController RequestMapping("/accountTbl") public class AccountTblController {AutowiredAccountTblMapper accountTblMapper;AutowiredOrderFeign orderFeign;GetMapping(…

西门子KTP触摸屏做画面时如何把设备图片或Logo做到画面上?

西门子KTP触摸屏做画面时如何把设备图片或Logo做到画面上? 如下图所示,新建一个项目,添加一个触摸屏设备,这里以TP1200 Comfort触摸屏为例进行说明,双击进入根画面, 如下图所示,在右侧的工具箱中…

SpringBoot 学习(一)自动装配

本系列文章为【狂神说 Java 】视频的课堂笔记,若有需要可配套视频学习。 1.1 pom.xml (1) 父工程( spring-boot-starter-parent ) 核心依赖,静态资源过滤等配置。编写或导入 springboot 依赖时不需要指定版本号,继承…

MySQL 连接查询(多表查询 二)

基本介绍 作用:连接查询(Join)操作,用于联结多个表以获取更全面和准确的数据 基本分类: 内连接:相当于查询A、B交集部分数据(去掉迪卡尔积无效组合)外连接: 左外连接&…

nginx: 部署前端项目的详细步骤(vue项目build打包+nginx部署)

目录 第一章 前言 第二章 准备工作 2.1 项目打包理解 2.1.1 打包命令 2.1.2 理解npm run serve/dev 和 npm run build命令 2.2 nginx参数配置理解 2.2.1 nginx常用基本命令 2.2.2 默认配置 2.2.3 搭建不同网站的站点 2.2.4 禁止访问的目录以及一键申请SSL证书验证目录…

Red Hat更新开发套件了,有你期待的功能吗?

导读近日,Red Hat公司将Red Hat Development Suite更新到了2.0版本,其中包括对Red Hat JBoss Development Suite和Red Hat Container Development Kit的一系列优化。 Red Hat Development Suite 2.0版本的主题是扩展可用性与产品集成,以及扩展…

毕业设计--基于SpringBoot+Vue的科研课题项目管理系统

介绍 基于SpringBootVue的科研课题项目管理系统 ; 实现 登录 /注销、 用户管理、项目管理、申报管理、变更管理、结题管理、角色管理、权限管理、数据字典等功能 ; 可作为 SpringBoot前后端分离项目 开发练习模型、课程设计 、 毕业设计 等。 环境准…

上车加速!为下一代LCoS HUD造势,华为和哪些企业在领跑

高工智能汽车研究院监测数据显示,今年1-7月中国市场(不含进出口)乘用车前装标配W/AR HUD交付108.35万辆,同比增长47.98%,前装搭载率升至9.82%。 其中,从价位区间分布来看,30万元及以上车型标配W…

【如何看待Unity收费】对标中小公司的待就业者的该如何做

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…