springboot 整合 Gson


前言

springboot 整合 Gson ,可以对Gson进行额外的配置,本文只设置当我们对Date对象进行json化,得到json字符串将是自己设置的pattern日期格式。

一、导入依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> 
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
                <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>
    </dependencies>

二、使用步骤

1.启动类

@SpringBootApplication
public class GsonApplication {
    public static void main(String[] args) {
        SpringApplication.run(GsonApplication.class, args);
    }
}

2.配置类

@Configuration
public class GsonConfig {

    @Bean
    public GsonFactoryBean gsonFactoryBean(){
        return new GsonFactoryBean();
    }

    @Bean
    public Gson gson(GsonFactoryBean gsonFactoryBean){
	    //设置日期格式
        gsonFactoryBean.setDateFormatPattern("yyyy-MM-dd HH:mm:ss");
        //afterPropertiesSet方法必须调用,否则无法将上面的配置生效
        gsonFactoryBean.afterPropertiesSet();
        return gsonFactoryBean.getObject();
    }

}

为什么gsonFactoryBean.afterPropertiesSet()必须调用?

  • 查看源码
package org.springframework.http.converter.json;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.lang.Nullable;

public class GsonFactoryBean implements FactoryBean<Gson>, InitializingBean {
    private boolean base64EncodeByteArrays = false;
    private boolean serializeNulls = false;
    private boolean prettyPrinting = false;
    private boolean disableHtmlEscaping = false;
    @Nullable
    private String dateFormatPattern;
    @Nullable
    private Gson gson;

    public GsonFactoryBean() {
    }

    public void setBase64EncodeByteArrays(boolean base64EncodeByteArrays) {
        this.base64EncodeByteArrays = base64EncodeByteArrays;
    }

    public void setSerializeNulls(boolean serializeNulls) {
        this.serializeNulls = serializeNulls;
    }

    public void setPrettyPrinting(boolean prettyPrinting) {
        this.prettyPrinting = prettyPrinting;
    }

    public void setDisableHtmlEscaping(boolean disableHtmlEscaping) {
        this.disableHtmlEscaping = disableHtmlEscaping;
    }

    public void setDateFormatPattern(String dateFormatPattern) {
        this.dateFormatPattern = dateFormatPattern;
    }

//根据以下方法,我们可以清楚的看到先是应用了配置,之后才生成gson对象
    public void afterPropertiesSet() {
        GsonBuilder builder = this.base64EncodeByteArrays ? GsonBuilderUtils.gsonBuilderWithBase64EncodedByteArrays() : new GsonBuilder();
        if (this.serializeNulls) {
            builder.serializeNulls();
        }

        if (this.prettyPrinting) {
            builder.setPrettyPrinting();
        }

        if (this.disableHtmlEscaping) {
            builder.disableHtmlEscaping();
        }

        if (this.dateFormatPattern != null) {
            builder.setDateFormat(this.dateFormatPattern);
        }

        this.gson = builder.create();
    }

    @Nullable
    public Gson getObject() {
        return this.gson;
    }

    public Class<?> getObjectType() {
        return Gson.class;
    }

    public boolean isSingleton() {
        return true;
    }
}

测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class Test {

    @Autowired
    public Gson gson;

    @org.junit.Test
    public void test01(){
    	//我们直接将Date对象转化为json字符串,不用像原来需先使用SimpleDateFormat等进行格式化
        System.out.println(gson.toJson(new Date()));
    }

}

结果

"2021-08-04 11:38:36"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值