Spring通过ResponseBody返回对象时,JSON属性变为首字母大写

基于STM32的智能水温控制系统设计 智能水温控制系统广泛应用于家庭、工业、农业等多个场景,尤其在热水器、恒温泳池和地暖系统中,通过实时监测和调节水温,提高设备的效率和用户的舒适度。本文基于STM32微控制器设计了一个智能水温控制系统,能够实时监测水温、用户设置温度,并根据需要控制加热器或冷却装置,确保水温维持在设定范围内。系统能够根据用户设定自动控制加热和冷却设备,确保水温维持在舒适的范围内,并通过OLED屏实时显示水温信息。在生成的项目基础上,编写水温监测、目标温度设定、加热器和冷却装置控制、OLED数据显示以及超温报警的代码。 阅读详情

1 背景

1.1 版本信息

  • springcloud版本:Dalston.SR1
  • springboot版本:1.5.3.Release
  • JDK版本:1.8

1.2 缺陷描述

通过success等方法返回的json数据的首字母均为大写,十分离奇。但该dto对象并无特别之处,具体代码如下所示

@Setter
@Getter
@ApiModel("返回结果")
public class ResultObject<T> implements Serializable {

    private static final long serialVersionUID = 3842145580241595212L;
    /**
     * 状态码
     */
    @ApiModelProperty("状态码")
    private Integer code;
    /**
     * 消息
     */
    @ApiModelProperty("消息")
    private String msg;
    /**
     * 数据
     */
    @ApiModelProperty("数据")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonProperty(value = "data")
    private T data;

    /**
     * 请求成功
     */
    public static <T> ResultObject<T> success(T data) {
        ResultObject<T> resultObject = new ResultObject<T>();
        resultObject.setCode(0);
        resultObject.setMsg("请求成功");
        resultObject.setData(data);
        return resultObject;
    }

    /**
     * 请求失败
     */
    public static <T> ResultObject<T> error(T data) {
        ResultObject<T> resultObject = new ResultObject<T>();
        resultObject.setCode(1);
        resultObject.setMsg("请求失败");
        resultObject.setData(data);
        return resultObject;
    }

    public static ResultObject exception(Integer code, String message) throws JsonProcessingException {
        ResultObject resultObject = new ResultObject();
        resultObject.setCode(code);
        resultObject.setMsg(message);
        return resultObject;
    }
}

请求结果如下图
在这里插入图片描述

2 原因排查

经排查,只要是直接通过spring的responseBody返回的对象都是属性大写开头,遂想到json的配置是否存在问题。黄天不负苦心人,找到如下配置类。正是他导致如此奇怪的结果:

@Configuration
public class JsonTransferConfigurer {

    @Bean
    public ObjectMapper simpleObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(new SimpleDateFormat("yyyyMMddHHmmss"));
        objectMapper.setSerializationInclusion(Include.NON_NULL);
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        return objectMapper;
    }

    @Bean
    @Primary
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(new SimpleDateFormat("yyyyMMddHHmmss"));
        objectMapper.setSerializationInclusion(Include.NON_NULL);
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
        return objectMapper;
    }
}

3 总结

只需修改PropertyNamingStrategy的策略即可,修改为LOWER_CAMEL_CASE

@Configuration
public class JsonTransferConfigurer {

    @Bean
    public ObjectMapper simpleObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(new SimpleDateFormat("yyyyMMddHHmmss"));
        objectMapper.setSerializationInclusion(Include.NON_NULL);
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        return objectMapper;
    }

    @Bean
    @Primary
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(new SimpleDateFormat("yyyyMMddHHmmss"));
        objectMapper.setSerializationInclusion(Include.NON_NULL);
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
        return objectMapper;
    }
}

具身智能ACT模型在lerobot机械臂上的实践与优化 本文详细介绍了如何在低成本lerobot机械臂上实践与优化具身智能ACT模型。从环境搭建、数据采集到模型原理与代码实战,提供了完整的入门指南。重点分享了通过数据增强、混合开源数据集及模型微调等策略,有效提升模型在抓取放置任务中的泛化能力与鲁棒性,为机器人学习爱好者提供了宝贵的实战经验。 阅读详情

相关推荐

基于Unidbg的小红书加密协议动态分析与算法还原实战

在移动应用安全领域,加密协议与签名机制是保障数据传输安全、实现客户端身份验证的核心技术。其原理通常涉及哈希算法、对称/非对称加密以及自定义的混淆逻辑,旨在防止请求被篡改或重放。理解这些协议对于安全研究、风控策略制定及合规的数据交互分析具有重要价值。在实际的工程实践中,面对高度混淆和加固的Native代码(SO库),传统的静态分析往往难以深入。此时,沙盒模拟执行技术提供了一种动态、可控的分析方案。通过搭建一个虚拟的移动应用运行环境,研究人员可以在无需真机、规避反调试机制的情况下,完整地追踪和观察加密算法的执行

weixin_29315091的博客 327

springboot接收和返回大写字母开头JSON

JAVAspringboot接收和返回大写字母开头JSON

weixin_43951638的博客 1686

Windows域账户无管理员权限也能装软件?3步搞定UAC设置(附安全提醒)

本文探讨了在Windows域环境中,如何通过配置用户账户控制(UAC)实现临时提权,让无管理员权限的域账户也能安装软件。文章详细介绍了三步走策略:临时加入本地管理员组、调整UAC行为以及至关重要的权限回收,并提供了脚本化部署方案与安全实践指南,旨在平衡企业IT管理的效率与安全。

fox11的博客 760

Spring中数据转JSON首字母大小写转换问题

问题: 在数据库设计时数据库设计字段例如有一个f_name,然后对应实体类中的属性时fName,那么返回给前端的应该也是fName,但是在写完之后,发现前端并没有fName字段,只有fname { "id": 1, "username": "xiao", "password": "123456", "lastName": "xiaoming", "fname": "wang" } 问题原因: 通过检查发现在后台查出的数

想飞的鱼的博客 1184

microblaze之Video Processing Subsystem调试误区

内容:总结video processing subsystem调试中遇到的问题,以及在解决问题中的思路方法论,引为前车之鉴。 1,我的目的是希望采用vps中的scaler模块对图像进行拉伸缩小。IP的配置如下: 2,整个系统的框架图如下,仅比上期的内容增加了scaler模块,如下: 3,查手册,可以知道这个scaler only组件分成了hscale,vscale和GPIO,其中GPIO是控制上下游stream流控设备复位用,暂时忽略。 hscale和vscale的寄存器空间如下,主要关注图

YDY5659150的专栏 3556

开发框架Furion之WebApi+SqlSugar (一)

MyFurion.Model项目中,通过Nuget添加Furion、Furion.Extras.DatabaseAccessor.SqlSugar、Furion.Extras.ObjectMapper.Mapster、SqlSugarCore,同时添加对项目MyFurion.Unility的引用。在MyFurion.Start项目中,通过Nuget添加 AspNetCoreRateLimit、System.Linq.Dynamic.Core,同时添加对项目MyFurion.Application的引用。

liwan09的博客 1万+

SpringBoot @ResponseBody 引发的返回参数大小写问题

@ResponseBody 后返回值参数自动变为驼峰命名法

fhr9998的博客 1806

科普:Frenet坐标

理想情况下,描述这种常见驾驶行为在数学上应该很容易。一种方法是使用新的坐标系。现在,而不是放下一个正常的笛卡尔网格,我们做一些事情,就像你看到下面…Frenet Coordinates是一种以比传统x,y笛卡尔坐标更直观的方式表示道路位置的方式。如果我们想要方程式来描述这个动作,那就不容易了!想象一下像下面这样一条弯曲的道路,笛卡尔坐标系就位于它的上面…使用这些笛卡尔坐标,我们可以尝试描述车辆通常在路上行驶的路径…那么在Frenet坐标系下呈现的典型轨迹是什么样的?在这里,我们定义了一个新的坐标系统。

OceanStar的博客 1万+

SpringBoot返回首字母大写的参数对象

在工作中,写业务信息交换接口时,偶尔会遇到需求方要求传入和返回首字母大写的参数,不符合变量首字符小写的变量命名规范,在返回时会遇到spring自动将首字母大写的参数转换为首字母小写。 返回参数解决方法: 1.首先在接收返回对象的get方法上添加@JSONField(name = " 变量名")注解: 2.在controller层将返回的对象转为JSONObject对象再进行封装,例如,我的返回对...

weixin_43483983的博客 4246

【异常】OpenClaw LLM Request Timeout 超时问题的快速定位与落地解决

摘要:OpenClaw系统在执行任务时频繁出现"LLM request timed out"异常。通过分析发现主模型自动调度导致响应延迟,且缺乏超时配置兜底。解决方案包括:1)将主模型切换为低延迟的豆包2.0 Lite;2)保留豆包2.0 Pro和Kimi作为备用;3)重启Gateway服务验证。优化后系统响应速度显著提升,未再出现超时异常。后续建议增加显式超时配置、优化任务拆分和Prompt指令,并建立网络监控机制。(148字)

奶爸的编程之路,也就一周冷个三天 1159

2026年华为od机试真题题库

OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)

面试高手的博客 19万+

spring boot json 首字母大小写问题解决方案

  spring boot默认使用的json解析框架是jackson,对于.net转java的项目来说太坑了,首字母大写的属性会自动转为小写,然后前端就悲剧了,十几个属性的ViewModel增加几个JsonField注解能解决问题,但若有几十上百个属性,那就只能换json框架了,幸好有fastjson能原样输出属性,下面是spring boot 使用fastjson的实施步骤,原文来自...

weixin_30820151的博客 2695

Coze实战:解锁多Bot协同与条件分支工作流的奥秘

本文详细介绍了在字节跳动Coze平台实现多Bot协同与条件分支工作流的方法。首先阐述了Coze平台的功能优势,包括丰富的插件、知识库和工作流功能。随后分步骤讲解了多Bot协同的实现:从准备工作、创建Bot到协同配置,并提供了电商客服的实例演示。在条件分支工作流部分,详细说明了条件节点的作用类型、条件设定方法以及具体配置操作,强调测试优化的重要性。最后通过电商平台综合案例,展示了多Bot协同与条件分支的实际应用效果,并针对常见问题提供解决方案。文章为开发者在Coze平台上构建智能应用提供了实用指导,有助于提升

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 451

Spring Boot @ResponseBody 转换 JSON数据时Date 类型处理方法

引用处: https://blog.youkuaiyun.com/molashaonian/article/details/53025118 https://blog.youkuaiyun.com/henianyou/article/details/81945409   解析JSON的方式: 这里一共有两种不同解析方式 Jackson 和 FastJson两种方式 Jackson的方式:SpringBoot 默认...

Willian的博客屋 1655

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Spring Boot整合FreeMarker模板引擎:语法、配置与实战避坑指南

在Java服务端渲染领域,模板引擎负责将数据模型与静态模板合并,动态生成HTML、邮件或配置文件。理解这一核心原理,有助于开发者从底层机制上把握视图层设计。FreeMarker作为一款基于Java的通用模板引擎,以其简洁的指令语法和扎实的渲染性能,在邮件通知、报表导出、代码生成等高精确输出场景中应用广泛。本文围绕Spring Boot生态,讲解FreeMarker的集成步骤、配置项、常用语法及布局复用方案,并针对中文乱码、数字千分位、模板缓存等高频问题给出排查思路,帮助后端工程师快速落地模板渲染能力并避开典

weixin_34232744的博客 604

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

前端开发者转型Java全栈:高效学习路径与AI工程化实践

面向对象编程(OOP)是一种以对象为核心,通过封装、继承和多态三大特性来组织代码的编程范式,它模拟现实世界,将数据和行为封装在对象中,从而提升代码的可重用性、可维护性和可扩展性。其核心原理在于通过类定义对象的蓝图,通过实例化创建具体对象,并通过消息传递实现对象间的交互。这一范式在构建复杂、模块化的企业级应用和系统时展现出巨大技术价值,尤其在需要高内聚、低耦合架构的后端服务开发中不可或缺。随着AI工程化和全栈开发的兴起,Java作为企业级应用的主流语言,其严谨的OOP体系与强大的Spring Boot生态,成

weixin_34056162的博客 340

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JavaWeb核心基础:Servlet生命周期、Request/Response与Session/Cookie

本文介绍了SpringBoot Web开发的基础知识和实践案例。主要内容包括:1. SpringBoot入门程序开发,展示如何创建Web应用并处理HTTP请求;2. HTTP协议详解,包含请求/响应格式及状态管理;3. 用户列表展示案例,实现数据读取、封装和响应;4. 分层解耦思想,讲解三层架构和IOC/DI实现原理;5. Bean管理和依赖注入的注解使用技巧。文章通过具体代码示例演示了SpringBoot的核心功能,帮助开发者快速掌握Web应用开发的关键技术。

xwhxy的博客 1197

Java:111-SpringMVC的底层原理(中篇)

如果需要补充,自行补充吧 对应的web.xml: index.jsp: springmvc.xml: entity里面的User类: test类: 自行配置tomcat,启动,运行看看结果,那么我们基础操作搭建完毕,现在我们来操作一下拦截: 在com包下创建Interceptor包,然后创建MyInterceptor类: 其中HandlerInterceptor接口如下: 这三个代表了三个地方,前面的三个拦截,比如: preHandle是第一个拦截,postHandle是第二个拦截,after

qq_59609098的博客 1304

JavaWeb学习

#前端部分(了解)课程思路、前端要素(Web了解、html、JS、vue、ajax、Element等)传统路线现在课程大纲路线## 前端要素(Web了解、html)HTML语法特点基本标签html标签(span)html标签(a)html标签(video)盒子模型:html标签(div)html标签(表格)html标签(表单)## 前端要素(JS)JS引入方式JS基础语法JS函数JS对象(基础(只关注Array、String、JSON)、BOM、DOM)JS事件监听## 前端要素(Vue)插值表达式Vue常

qq_2634545805的博客 431

tiny11builder:把官方 Windows 11 ISO 重建成精简可引导镜像,没有 TPM 的老机器也能装机

老机卡在 Windows 11 安装器的 TPM 检查页,是不是够过火?tiny11builder 拿官方 ISO 当原料,移除 23 款预装应用、关掉遥测、写入绕过 TPM 检查的注册表,产出一张可写进 U 盘直接装的精简 Windows 11 镜像。 ## 核心能力一览 - **应用瘦身**:Edge、OneDrive、Xbox、天气等 23 款预装包被连根拔起,Edge 相关目录一并清掉

gitblog_01128的博客 80

SpringBoot解决驼峰命名 ---返回Json实体类属性大小写问题

解决:两种方式 Jackjson 和 Fastjson Jackjson 方式: 通过@JsonProperty注解来解决比较方便,作用是把该属性的名称序列化(或者反序列化接收参数)为另外一个名称,如把trueName属性序列化为name,@JsonProperty(value="name") 如果注解放到属性上,则返回的时候既有大写也有小写,如下: @JsonPropert...

weixin_42981419的博客 7015

@RequestBody修饰的对象属性大小写映射问题

@RequestBody注解的属性值映射,是区分大小写的。 如前端传的属性名为NAME,后端对象属性名为name , 这样是无法映射值的。 解决办法: 在对象的属性上加注解即可 @JsonProperty("NAME") private String name; ...

mclt2017的博客 2100

Springboot 使用restTemplate 进行跨域请求 response reqeust中首字母大写的问题

请求第三方系统,调用第三方API时可能会遇到双方协商定义的响应体中某个字段的首字母为大写的情况: 响应体: { "PlannerId": test123, "Name": "testName", "operation": null, } 使用大写字母的字段去接收响应体时,其实API请求的每一个返回值都是小写的。所以映射关系找不到导致该值为null。 原因:spring使用HttpMessageConverter将返回实体转换为json 解决方法: @Js.

weixin_44522336的博客 1346

SpringMVC 的请求响应扩展 ( @ResponseBody 、ResponseEntity对象 、@RequestBody 、RequestEntity对象 )

@ResponseBody 概念 @ResponseBody :该注解使用在Controller方法上的 。将方法的返回值通过适当的转换器转换为指定的格式之后,写入到 response 对象的 body 区),通常用来给客户端返回 JSON 数据或者是 XML 数据。 当方法上面没有写 ResponseBody 时,底层会将方法的返回值封装为 ModelAndView 对象;需要注意的是...

weixin_42325327的博客 2776

(っ•̀ω•́)っ 如何将对象属性的首字母以大写格式返回

【代码】如何以对象属性的首字母大写形式返回。

原名:@程序员大禹 554

出参如何转换成大写

前端显示的出参改成大写,要如何改呢?: 第一步把:相应的cloudServer的几个出参文件:prto、Out类、还有存储过程那块的@RESULT 都改成大写。后面开始在appserver这里改这点: 每个形参要有set、get方法更重要是的是之所以要有这些,是为了 @JsonProperty这个方法:框架会自动帮我们在转json数据时,自动转为我们设置的key 参考网址:Springboot中后端传递参数字段大写,前端收到参数名为

Ga_17118的博客 264
上一篇: HttpServletResponse通过setContentType设置响应头失败,以及解决办法
下一篇: 远离996之神技能:泣血经验,每天过一遍
一步一结
博客等级 码龄7年 50粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值