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

这篇具有很好参考价值的文章主要介绍了【Java 笔记】使用Fastjson2时,对象转json首字母大小写问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发环境:

一、JSON 转 Object

1.问题:

2.解决方案

二、Object转 JSON

三、SpringBoot设置fastjson2 为默认

pom.xml

2. 配置类

四、FastJson2 注解

默认

2. @JSONType 类注解

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

五、思考问题

Java 对象为什么需要序列化?

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


开发环境:

  • 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字段首字母大写

fastjson转对象不区分大小写,架构师之路-java,对象转json首字母大小写问题,FastJson2,springboot,Powered by 金山文档

这里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 {
    @Override
    public 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对象序列化和反序列化文章来源地址https://www.toymoban.com/news/detail-603559.html

到了这里,关于【Java 笔记】使用Fastjson2时,对象转json首字母大小写问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • fastjson2 介绍及使用

    fastjson2 是 FASTJSON 项目的重要升级,目标是为下一个十年提供一个高性能的JSON库, fastjson2 性能相比原先旧的 fastjson 有了很大提升,并且 fastjson2 更安全,完全删除autoType白名单,提升了安全性。 关于fastjson2升级指南 fastjson2 的github地址 maven如下: 需要注意的一点是在使用 fa

    2023年04月20日
    浏览(18)
  • FastJson2.0介绍和使用

    FASTJSON v2 是 FASTJSON 项目的重要升级,目标是为下一个十年提供一个高性能的 JSON 库。通过同一套 API , 支持 JSON/JSONB 两种协议,JsonPath 是一等公民。 支持全量解析和部分解析。 支持 Java 服务端、客户端 Android 、大数据场景。 支持 Kotlin 支持 JSON Schema 支持 Android 支持 Graal

    2024年02月05日
    浏览(32)
  • springboot-redis使用fastjson2

    注:springboot2.*使用fastjson2-extension-spring5,3.*使用fastjson2-extension-spring6

    2024年02月15日
    浏览(28)
  • FastJson转Java对像字段不区分大小写

    昨天遇到参数key大小写不一致导致校验签名失败的问题,查了很长时间才找到原因。看了一下FastJson源码,发现JSON.toObject中转换成对象的时候会忽略大小写。 所以,当使用了JSON.toObject将json转成Java对象后,再用JSON.toObject转成json,key值就变了。 写个方法验证一下: 输出:

    2024年02月07日
    浏览(27)
  • 接口请求与对象转json中字段大小写的处理

    》前端请求对象字段为大写 》后端接受对象字段也为大写 前后端对象字段一模一样,就是接受不到前端传过来的值,针对这种情况,只需在后端对象中加 @JsonProperty(\\\"Id\\\") 即可 如下所示: 1)通过 com.fasterxml.jackson.databind.ObjectMapper 去转换,具体代码如下 2、 第二种通过gson去转

    2024年04月23日
    浏览(23)
  • java中字母、字符串,输入小写输出大写,输入大写输出小写、大小写转换

    思路: 1、利用“大小写字母之间正好相差32”这一特点                                                       2、用  toLowerCase()、toUpperCase() 字符串自带的方法  提示: Java中没有.nextChar()。 所以要读取char,我们使用  .next().charAt(0)  1、 输入小写输

    2024年02月07日
    浏览(47)
  • fastjson2 打开 AutoType

    FASTJSON支持AutoType功能,这个功能在序列化的JSON字符串中带上类型信息,在反序列化时,不需要传入类型,实现自动类型识别。 必须显式打开才能使用。和fastjson 1.x不一样,fastjson 1.x为了兼容有一个白名单,在fastjson 2中,没有任何白名单,也不包括任何Exception类的白名单,必

    2024年02月10日
    浏览(28)
  • 使用python判断字母大小写的几种方法

    使用Python中的内置函数 isupper() 和 islower() 来判断一个字母是否为大写或小写字母。 用户输入一个字母,程序使用isupper()和islower()函数判断字母是否为大写或小写,并输出相应的信息。如果用户输入了除字母以外的字符,程序会输出一个错误信息。 使用ASCII码值来判断字母大

    2024年02月04日
    浏览(40)
  • fastjson--对象与JSON之间的转换方法

    1、Java对象–JSON对象: (JSONObject)JSONObject.toJSON(Java对象实例) 2、Java对象–JSON字符串 JSONObject.toJSONString(Java对象实例) 3、JSON对象–JSON字符串 JSONObject.toJSONString(); 4、JSON对象–Java对象 JSONObject.toJavaObject(JSON对象实例, Java对象.class); 5、JSON字符串–JSON对象 JSONObject.parseObject(JSON字符

    2024年02月08日
    浏览(34)
  • 【C语言数据类型】字符类型char如何使用?字母大小写转换?

    c语言基本数据类型包括 1.常量                                        2.整型和浮点型                                        3. 字符型 这篇文章来记录一下自己学习字符类型char时的笔记以及心得 (1).定义: char是用于C或C++中定义字符型变量,只占一个字节 (2).范围

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包