解決fastjson不輸出空字串/設定fastjson空值也顯示
阿新 • • 發佈:2018-12-11
問題背景
//設定 Map < String , Object > jsonMap = new HashMap< String , Object>(); jsonMap.put("a",111); jsonMap.put("b","aaa"); jsonMap.put("c",null); jsonMap.put("d","blog.csdn.net/moshowgame"); //輸出 String str = JSONObject.toJSONString(jsonMap); System.out.println(str); //輸出結果:{"a":111,"b":"aa",d:"blog.csdn.net/moshowgame"}
從輸出結果可以看出,只要value為空,key的值就會被過濾掉,這明顯不是我們想要的結果,會導致一些坑爹的行為。
解決方案
這時我們就需要用到fastjson的SerializerFeature序列化屬性,也就是這個方法:
JSONObject.toJSONString(Object object, SerializerFeature... features)
SerializerFeature有用的一些列舉值
QuoteFieldNames———-輸出key時是否使用雙引號,預設為true
WriteMapNullValue——–是否輸出值為null的欄位,預設為false
WriteNullNumberAsZero—-數值欄位如果為null,輸出為0,而非null
WriteNullListAsEmpty—–List欄位如果為null,輸出為[],而非null
WriteNullStringAsEmpty—字元型別欄位如果為null,輸出為”“,而非null
WriteNullBooleanAsFalse–Boolean欄位如果為null,輸出為false,而非null
如果是幾句程式碼,直接就
String jsonStr =
JSONObject.toJSONString(object,SerializerFeature.WriteMapNullValue);
如果是專案,需要配置FastjsonConverter.java
了
package com.softdev.system.likeu.config; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.serializer.SerializerFeature; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.StringHttpMessageConverter; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; /** * 新增fastjson的轉換 */ @Configuration public class FastjsonConverter { @Bean public HttpMessageConverters customConverters() { // 定義一個轉換訊息的物件 FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); // 新增fastjson的配置資訊 比如 :是否要格式化返回的json資料 FastJsonConfig fastJsonConfig = new FastJsonConfig(); // 這裡就是核心程式碼了,WriteMapNullValue把空的值的key也返回 fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue); List<MediaType> fastMediaTypes = new ArrayList<MediaType>(); // 處理中文亂碼問題 fastJsonConfig.setCharset(Charset.forName("UTF-8")); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastConverter.setSupportedMediaTypes(fastMediaTypes); // 在轉換器中新增配置資訊 fastConverter.setFastJsonConfig(fastJsonConfig); StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(); stringConverter.setDefaultCharset(Charset.forName("UTF-8")); stringConverter.setSupportedMediaTypes(fastMediaTypes); // 將轉換器新增到converters中 return new HttpMessageConverters(stringConverter,fastConverter); } }