【Java 笔记】使用Fastjson2时,对象转json首字母大小写问题

article/2025/11/11 3:13:12

开发环境:

  • Spring cloud

  • Fastjson2

一、JSON 转 Object

  • 推送第三方数据时,对方http接口消息体为json,但是字段首字母大写

  • 我们需要接收JSON 转 Object

[

{

"ItemCode": "WIND_SPEED",

"ItemValue": "2.1",

"WorkTime": "20230104165400",

"Remark": "风速(m/s)"

}

]

  • 返回结果首字母大写:

{"Status": "1","Msg": "服务调用处理成功"}

1.问题:

序列化和反序列化时字段首字母自动变成小写:如

@Data
@Slf4j
@AllArgsConstructor
@NoArgsConstructor
public class Item {private String ItemCode;private String ItemValue;private String WorkTime;private String Remark;
}@Data
@Slf4j
@AllArgsConstructor
@NoArgsConstructor
public class RspResult {private String Status;private String Msg;
}

  • 序列化使用 JSON.toJSONString(Object object),首字母自动变成小写

[

{

"itemCode": "WIND_SPEED",

"itemValue": "2.1",

"workTime": "20230104165400",

"remark": "风速(m/s)"

}

]

  • 反序列化:使用 JSON.parseObject(String text, Class<T> clazz) 转换出对象为null

  • text为 {"Status": "1","Msg": "服务调用处理成功"}

  • clazz 为 {"status": null,"msg": null}

2.解决方案

  • 使用 @JSONField(name = "ItemCode") 或 @JsonProperty("ItemCode")

  • Java代码中元素首字母必须小写,否则@JSONField@JsonProperty失效

如 private String itemCode;

二、Object转 JSON

  • 我们提供接口,返回JSON字段首字母大写

这里SpringBoot默认使用Jackson,所以用 @JsonProperty

@JsonProperty

@JSONField

JSON.toJSONString(Object object)

生效

生效

接口返回Object

生效

不生效

(因为spring boot默认Jackson

三、SpringBoot设置fastjson2 为默认

注意:千万不要在老项目中修改,否则你返回的字段会有问题,如下

字段名

Jackson(无注解)

fastjson2(无注解)

eName

eName(不变

EName

  1. pom.xml

<!-- pom.xml --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!-- 去掉Jackson依赖,用fastjson --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-json</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.6</version></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2-extension</artifactId><version>2.0.6</version><!-- <version>${fastjson2.version}</version> --></dependency>

2. 配置类

import com.alibaba.fastjson2.support.spring.http.converter.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.util.ArrayList;
import java.util.List;@Configuration
public class JsonMessageConverterConfigurer implements WebMvcConfigurer {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();// 自定义配置...// FastJsonConfig config = new FastJsonConfig();// config.set...// converter.setFastJsonConfig(config);// spring boot高版本无需配置,低版本不配置报错:Content-Type cannot contain wildcard type '*'List<MediaType> fastMediaTypes = new ArrayList<>();fastMediaTypes.add(MediaType.APPLICATION_JSON);fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);converter.setSupportedMediaTypes(fastMediaTypes);converters.add(0,converter);}
}

四、FastJson2 注解

  1. 默认

代码

是否返回null字段

JSON.toJSONString(Object)

接口 return Object

JSON.toJSONString(Object,JSONWriter.Feature.WriteMapNullValue)

类注解@JSONType(serializeFeatures = JSONWriter.Feature.WriteMapNullValue)

2. @JSONType 类注解

代码

描述

@JSONType(serializeFeatures = JSONWriter.Feature.WriteMapNullValue)

返回null字段

3. @JSONField(name = "othername") 属性注解

代码

描述

@JSONField(name = "Temperature")

private String temperature;

字段重命名Temperature

注意:属性首字母必须小写否则@JSONField失效

五、思考问题

  1. Java 对象为什么需要序列化?
  1. 为什么对象没有实现Serializable接口,也可以使用Fastjson序列化?

详情请移步 【Spring】1.Java对象序列化和反序列化


http://chatgpt.dhexx.cn/article/dwEvZtb5.shtml

相关文章

js 数组、对象转json 以及json转 数组、对象

1、JS对象转JSON 方式&#xff1a;JSON.stringify(obj) var json {"name":"iphone","price":666}; //创建对象&#xff1b; var jsonStr JSON.stringify(json); //转为JSON字符串 console.log(jsonStr);2、JS数组转JSON //数组转json…

对象转JSON首字母大写

最近在做一个第三方接口&#xff0c;接口给的数据类型如下 请求报文如下 {"A0144":"12141256","AB6AM":"中国银行支行","STATUS":1} 一般按照对象转JSON会使首字母小写&#xff0c;与接口文档不相符&#xff0c;因此需要…

Object对象转实体对象,java对象转json

Object对象转实体对象 在后台发起HTTP请求的时候&#xff0c;响应体传回的一般是Object或者JSON字符串。 方法一 要将Object对象转换成实体类对象可以先使用com.alibaba.fastjson.JSONObject类的toJSONString方法将Object对象转换成JSON字符串&#xff0c;然后再调用JSONObj…

对象 和 json 互转 四种方式 json-lib、Gson、FastJson、Jackson

文章目录 一、 json-lib二、 Google的Gson1.简介2. 配置步骤1. MAVEN 依赖引入2. gsonUtil 工具类3. 排除不要序列化的熟悉注解类 Exclude 三. 阿里巴巴的FastJson1.简介2.配置步骤1.引入maven2. 配置 CustomFastjsonConfig3. 测试 4. 开源的Jackson简介&#xff1a;Jackson配置…

大数据Java学哪个好,哪个更有发展前景?

文章来源&#xff1a;加米谷大数据 在IT职业技能培训当中&#xff0c;Java开发可以说是非常经典的一个方向&#xff0c;行业当中对于Java开发人才&#xff0c;早年可以是存在长期持续性的需求。而大数据&#xff0c;作为近年来的新兴技术热点&#xff0c;也同样备受关注。因此很…

大数据Java基础之常用类

欢迎关注公众号&#xff1a; 9-1 字符串相关的类 String常用方法 9-2 JDK8之前日期时间API 9-4 Java比较器 9-5 System类 9-6 Math类 9-7 BigInteger与BigDecimal

Java毕设项目医疗大数据系统计算机(附源码+系统+数据库+LW)

Java毕设项目医疗大数据系统计算机&#xff08;附源码系统数据库LW&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

方向选择(嵌入式 大数据 java)

时间匆匆&#xff0c;不知不觉大二后半期了。晚上开了会要确定方向选择&#xff0c;嵌入式&#xff0c;大数据&#xff0c;java三个方向。 犹豫了好久&#xff0c;因为学了一段时间的java还是偏向于java的 不过也想学大数据&#xff0c;因为最近很火 大家都 知道的。现在来简…

大数据入门:Java和Scala编程对比

在学习大数据之初&#xff0c;很多人都会对编程语言的学习有疑问&#xff0c;比如说大数据编程主要用什么语言&#xff0c;在实际运用当中&#xff0c;大数据主流编程是Java&#xff0c;但是涉及到Spark、Kafka框架&#xff0c;还需要懂Scala。今天的大数据入门分享&#xff0c…

视频教程-大数据Java强化班(十)之大数据爬虫-Java

大数据Java强化班(十)之大数据爬虫 10年一线开发及项目管理经验&#xff0c;6年以上大数据项目架构、实施、开发与运维经验&#xff0c;骨灰级大数据玩家&#xff0c;对Hadoop、Storm、Spark、Flink、Kylin、Druid等大数据技术有较深研究。搭建、维护过上百节点集群&#xff0c…

Java大数据开发

(后记&#xff1a;写这些东西不管出于什么目的&#xff0c;总之自己乐意&#xff0c;有时候回顾一下&#xff0c;别有一番滋味&#xff01;) 博主 QQ&#xff1a;1103088881 idea 从菜鸟到大神 css-3d旋转相册 时钟罗盘 Java学习方法总结 Java 面向对象 …

大数据用Python还是JAVA

前言 大数据用python还是java?书声琅琅教育番茄老师介绍&#xff0c;人生苦短&#xff0c;我用python&#xff0c;这是目前比较流行的行话了&#xff0c;对于用python好还是JAVA好&#xff0c;大家都有自己的看法&#xff0c;虽然JAVA流行时间较&#xff0c;但是python出现的…

Java及大数据学习路线

1.Java学习路线 1.1JavaSE Java基础 Java8新特性 数据库MySQL与SQL语言 JDBC 1.2JavaWeb HTML基础与CSS JavaScript DOM 与 jQuery XML与Tomcat HTTP协议 服务器端组件Servlet JSP EL表达式 JSTL 会话控制Cookie和Session 服务器端组件Filter 服务器端组件Listener 国际化 …

搞大数据,Java 工程师需要掌握哪些知识?

先看再点赞&#xff0c;给自己一点思考的时间&#xff0c;微信搜索【沉默王二】关注这个有颜值却假装靠才华苟且的程序员。 本文 GitHub github.com/itwanger 已收录&#xff0c;里面还有我精心为你准备的一线大厂面试题。 题目是一名叫“截然不同”的同学私信我的一个问题&…

大数据Java基础之Java反射机制

欢迎关注公众号&#xff0c;一起进步&#xff0c;共同成长。 15-1 Java反射机制概述 15-2 理解Class类并 获取Class的实例 15-3 类的加载 与ClassLoader的理解 15-4 创建运行时类的对象 15-5 获取运行时类的完 整结构 15-6 调用运行时类的指定结构 15-7 反射的应用&#xff1a;…

大数据java基础吗?

大数据必备 关于大数据基础知识&#xff0c;以前浪尖写过一篇文章&#xff0c;也多次在 知识星球里分享过经验。 具体学习内容&#xff0c;可以参看如下文章&#xff1a; 入门大数据必读 这个可以看到做大数据的话java是必需品&#xff0c;因为基本所有的大数据框架都是jvm开发…

大数据Java基础之异常

欢迎关注公众号&#xff1a; Java知识体系 7-1 异常概述与异常体系结构 7-2 常见异常 7-3 异常处理机制一&#xff1a;try-catch-finally 7-4 异常处理机制二&#xff1a;throws 7-6 用户自定义异常类

大数据Java基础之集合

欢迎关注公众号&#xff1a; 11-1 Java集合框架概述 11-2 Collection接口方法 11-3 Iterator迭代器接口 11-4 Collection子接口之一&#xff1a;List接口 List实现类之二&#xff1a;LinkedList 11-5 Collection子接口之二&#xff1a;Set接口 11-6 Map接口 Map实现类之二&…

大数据 java操作hive

大数据 java操作hive 版权声明&#xff1a; 本文为博主学习整理原创文章&#xff0c;如有不正之处请多多指教。 未经博主允许不得转载。 https://blog.csdn.net/qq_42595261/article/details/83022249 虚拟机上操作&#xff0c;保证hive数据库能正常连接进入。 如因退出没有…