前言
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" ) ;
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;
}
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 ( ) {
System . out. println ( gson. toJson ( new Date ( ) ) ) ;
}
}
结果
"2021-08-04 11:38:36"