springboot(五)使用FastJson返回Json視圖
阿新 • • 發佈:2019-01-17
[] over img fig pack tpm sage ati 序列化與反序列化
FastJson簡介:
fastJson是阿裏巴巴旗下的一個開源項目之一,顧名思義它專門用來做快速操作Json的序列化與反序列化的組件。它是目前json解析最快的開源組件沒有之一!在這之前jaskJson是命名為快速操作json的工具,而當阿裏巴巴的fastJson誕生後jaskjson就消聲匿跡了,不過目前很多項目還在使用。 本文目標: 將fastJson加入到SpringBoot項目內,配置json返回視圖使用fastJson解析。一、項目搭建
項目搭建目錄及數據庫
二、添加依賴(FastJson依賴)
spring-boot-stater-tomcat依賴的scope屬性一定要註釋掉,我們才能在IntelliJ IDEA工具使用SpringBootApplication的形式運行項目!
依賴地址:mvnrepository.com/artifact/com.alibaba/fastjson/1.2.31
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <View CodemodelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository--> </parent> <groupId>com.dyh</groupId> <artifactId>lesson_three</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>lesson_three</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <!--<scope>provided</scope>--> </dependency> <dependency> <!--fastJson--> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.51</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
三、配置文件(該項目用Spring Data JPA架構)
spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT driverClassName: com.mysql.cj.jdbc.Driver username: root password: root jpa: database: MySQL show-sql: true hibernate: # naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy # ddl-auto: createView Code
四、創建一個FastJsonConfiguration配置信息類。
添加@Configuration註解讓SpringBoot自動加載類內的配置,有一點要註意我們繼承了WebMvcConfigurerAdapter這個類,這個類是SpringBoot內部提供專門處理用戶自行添加的配置,裏面不僅僅包含了修改視圖的過濾還有其他很多的方法,包括我們後面章節要講到的攔截器,過濾器,Cors配置等。
@Configuration public class FastJsonConfiguration extends WebMvcConfigurerAdapter { /** * 修改自定義消息轉換器 * @param converters 消息轉換器列表 */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { //調用父類的配置 super.configureMessageConverters(converters); //創建fastJson消息轉換器 FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); //創建配置類 FastJsonConfig fastJsonConfig = new FastJsonConfig(); //修改配置返回內容的過濾 fastJsonConfig.setSerializerFeatures( SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty ); fastConverter.setFastJsonConfig(fastJsonConfig); //將fastjson添加到視圖消息轉換器列表內 converters.add(fastConverter); } }
FastJson SerializerFeatures
WriteNullListAsEmpty :List字段如果為null,輸出為[],而非null WriteNullStringAsEmpty : 字符類型字段如果為null,輸出為"",而非null DisableCircularReferenceDetect :消除對同一對象循環引用的問題,默認為false(如果不配置有可能會進入死循環) WriteNullBooleanAsFalse:Boolean字段如果為null,輸出為false,而非null WriteMapNullValue:是否輸出值為null的字段,默認為false。五、測試,並比較用了FastJson與沒有用之間的比較
使用前:
使用後:
name的值從NULL變成了"",那麽證明我們的fastJson消息的轉換配置完美生效了
springboot(五)使用FastJson返回Json視圖