【fastjson】fastjson转换时字段前面的下划线丢失

当使用Fastjson将对象转换为JSON时,遇到字段名丢失前导下划线的情况。例如,字段 '_abc' 转换后变为 'abc'。解决此问题的方法是在DTO类中对应字段上添加 @JSONField(name=_abc) 注解,明确指定字段的原始名称。参考文章介绍了如何修复fastjson序列化时字段名缺失下划线的错误。

在使用fastjson将object转json时,遇到了如题的问题,举个栗子,字段_abc在转json后名字变成了abc。

解决办法是在需要转json的dto的字段上标注字段原本的名字

    @JSONField(name="_abc")

参考文章
[1],fastjson序列化时字段前面的下划线缺失

<think>好的,我现在要解决用户的问题:MyBatis查询结果用FastJSON接收字段名称不匹配驼峰命名的问题。用户提到mybatis、fastjson和驼峰命名字段映射的问题。我需要综合之前的引用和知识来给出解决方案。 首先,用户之前提到开启MyBatis的驼峰映射,引用[1]中提到了在application.yml里设置map-underscore-to-camel-case为true。这应该是第一步,确保MyBatis能将数据库的下划线字段转为Java对象的驼峰属性。但用户现在的问题可能出现在FastJSON序列化字段名还是下划线形式,导致接收不一致。 接下来,我需要考虑FastJSON的配置。FastJSON默认可能不会自动将驼峰属性转为下划线,或者反序列化需要特定设置。查看用户提供的引用,引用[3]提到了SpringBoot开启驼峰映射,可能涉及FastJSON的配置。 可能的解决方案包括: 1. 在MyBatis确保驼峰映射开启的情况下,检查FastJSON的序列化设置。比如,使用@JSONField注解指定序列化的名称,或者在FastJSON配置中设置驼峰转换。 用户的问题是在接收字段不匹配,可能返回给前端的数据字段还是下划线形式,而前端期望驼峰。或者反过来,数据库字段下划线,Java对象是驼峰,但FastJSON在序列化没有正确处理,导致字段名不一致。 例如,Java对象中的userName对应数据库的user_name。MyBatis正确映射后,Java对象属性是userName,但FastJSON默认序列化为userName,而前端可能需要下划线形式,或者相反的情况。不过用户的问题可能是FastJSON接收字段名不匹配,可能是指反序列化JSON的字段名是下划线,而Java对象是驼峰,需要配置FastJSON来映射。 解决方案可能包括: - 在Java对象的字段上使用@JSONField(name = "user_name")来指定JSON的字段名。 - 配置FastJSON的全局命名策略,例如设置PropertyNamingStrategy为SnakeCase。 此外,引用[2]中的SonMapper和SonVo可能涉及实体类与数据库字段的映射,如果MyBatis的驼峰已经开启,但FastJSON没有相应配置,可能导致序列化后的JSON字段名不符合预期。 总结步骤: 1. 确认MyBatis驼峰映射已开启,确保数据库下划线字段正确映射到Java对象的驼峰属性。 2.FastJSON中使用注解或全局配置,调整序列化/反序列化的字段名策略,确保与前端或接收方要求的命名方式一致。 3. 测试验证,确保字段正确映射。 可能的问题:用户是否在FastJSON中正确配置了命名策略,或者在实体类中没有使用正确的注解导致字段名不匹配。需要检查这两部分。</think>### 解决方案分步说明 #### 1. 确保MyBatis驼峰命名映射已开启 在MyBatis配置中启用`map-underscore-to-camel-case`功能,将数据库字段下划线命名自动映射为Java实体类的驼峰属性。 **示例配置(application.yml)**: ```yaml mybatis: configuration: map-underscore-to-camel-case: true # 开启驼峰映射[^1] ``` #### 2. 使用FastJSON注解指定字段名 在Java实体类的字段上添加`@JSONField`注解,显式定义JSON序列化/反序列化的字段名称。 **示例代码**: ```java public class User { @JSONField(name = "user_name") // 映射JSON字段名为下划线格式 private String userName; // Getter & Setter } ``` #### 3. 全局配置FastJSON命名策略(可选) 通过FastJSON的全局配置,统一设置属性命名策略为**下划线转驼峰**或**驼峰转下划线**。 **示例配置(SpringBoot启动类中)**: ```java @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures(SerializerFeature.PrettyFormat); // 设置全局命名策略(驼峰转下划线) config.setPropertyNamingStrategy(PropertyNamingStrategy.SnakeCase); FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); converter.setFastJsonConfig(config); return new HttpMessageConverters(converter); } ``` #### 4. 验证映射结果 查询数据库后,检查返回的JSON字段名称是否符合预期。例如: - 若数据库字段为`user_name`,Java字段为`userName`,则FastJSON默认输出为`userName`; - 若需输出为`user_name`,则需通过注解或全局配置实现。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值