spring整合Gson

spring整合Gson

如何操作

配置上没啥好说的,首先去除spring自带的Jackson

# pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-json</artifactId>
        </exclusion>
    </exclusions>
</dependency>
// application.java
@SpringBootApplication(exclude = {
   JacksonAutoConfiguration.class})
public class NekoApplication {
   
    ...

引入Gson

# pom.xml
<!-- Gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

最后在application.properties中自定义Gson的属性就完成了,具体有哪些属性可以查看参考1链接,如果对参考1中属性描述有疑问,可以在参考2中搜索

#Preferred JSON mapper to use for HTTP message conversion.
spring.mvc.converters.preferred-json-mapper=gson

# Format to use when serializing Date objects.
spring.gson.date-format="YYYY-MM-DD"
# Whether to disable the escaping of HTML characters such as '<', '>', etc.
spring.gson.disable-html-escaping=false
# Naming policy :someFieldName —> SomeFieldName
spring.gson.field-naming-policy=upper_camel_case
# Whether to serialize null fields.
spring.gson.serialize-nulls=false
# Whether to enable serialization of complex map keys
spring.gson.enable-complex-map-key-serialization=true
# Whether to exclude inner classes during serialization.
spring.gson.disable-inner-class-serialization=true

然后进入正题,也就是这次在整合Gson中遇到的问题:

为什么spring.gson.exclude-fields-without-expose-annotation不起作用???

课代表: 无论true和false,只有加了@Expose注解的字段才会序列化。要想把没有该注解的字段也加入序列化,建议直接把这个属性从propertirs或者yaml文件中删了。

在这之前,我们需要先了解

spring反序列化过程

从 message converter开始,贴一个全路径名org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver#readWithMessageConverters(org.springframework.http.HttpInputMessage, org.springframework.core.MethodParameter, java.lang.reflect.Type)
在该方法中,会获取所有注册在容器中的message converter进行遍历,查找可以进行反序列的converter

// 获取所有message converter
Iterator var11 = this.messageConverters.iterator();

HttpMessageConverter converter;
Class converterType;
GenericHttpMessageConverter genericConverter;
    while(true) {
   
        if (!var11.hasNext()) {
   
        break label98;
        }

        converter = (HttpMessageConverter)var11.next();
        converterType = converter.getClass()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中集成Gson的过程中,需要注意版本差异。本文所使用的Spring Boot版本为2.3.5.RELEASE。为了集成Gson,首先需要排除原来的Jackson依赖,然后导入Gson依赖。在pom.xml文件中可以进行如下配置: ```xml <!-- Spring Boot web容器 --> dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除Jackson依赖 --> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> </exclusions> </dependency> <!-- 导入Gson依赖 --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </dependency> ``` 通过这样的配置,就可以在Spring Boot中成功集成Gson。集成Gson后,可以支持SpringSpring Boot集成JSON格式数据的序列化和反序列化,同时也支持XML和Protobuf格式的数据序列化和反序列化。此外,可以根据需要随意扩展和替换JSON转换框架,例如Fastjson和Jackson等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Spring Boot整合系列——Gson完整详细版](https://blog.csdn.net/Saykuray/article/details/110506500)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [一个简洁的java http框架.rar](https://download.csdn.net/download/Gefangenes/87841515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值