目錄
Mybatis返回HashMap時,某個字段值爲null時,key消失的問題
Mybatis返回HashMap時,某個字段值爲null時,key消失的問題
在mybatisConfig.xml文件中設置
<configuration>
<settings>
<!--解決,查詢返回結果含null沒有對應字段值問題-->
<setting name="callSettersOnNulls" value="true"/>
</settings>
</configuration>
springboot待實現
如何將map中的null批量轉換成“”
繼承ObjectMapper類,重新序列化邏輯
package com.anran.projectmanage.util;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
public class JsonDealUtils extends ObjectMapper {
public JsonDealUtils() {
super();
this.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException, JsonProcessingException {
arg1.writeString("");
}
});
}
}
使用方式
List<Map<String,Object>> list = new ArrayList<>();
Map<String,Object> map = new HashMap<>();
map.put("name", null);
map.put("age", null);
Map<String,Object> map1 = new HashMap<>();
map1.put("name", "anran");
map1.put("age", null);
list.add(map);
list.add(map1);
ObjectMapper s = new JsonDealUtils();
try {
return s.writeValueAsString(list);
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
運行結果:
SerializerFeature 中的配置含義
package com.alibaba.fastjson.serializer;
/**
* @author wenshao<[email protected]>
*/
public enum SerializerFeature {
QuoteFieldNames,//輸出key時是否使用雙引號,默認爲true
/**
*
*/
UseSingleQuotes,//使用單引號而不是雙引號,默認爲false
/**
*
*/
WriteMapNullValue,//是否輸出值爲null的字段,默認爲false
/**
*
*/
WriteEnumUsingToString,//Enum輸出name()或者original,默認爲false
/**
*
*/
UseISO8601DateFormat,//Date使用ISO8601格式輸出,默認爲false
/**
* @since 1.1
*/
WriteNullListAsEmpty,//List字段如果爲null,輸出爲[],而非null
/**
* @since 1.1
*/
WriteNullStringAsEmpty,//字符類型字段如果爲null,輸出爲"",而非null
/**
* @since 1.1
*/
WriteNullNumberAsZero,//數值字段如果爲null,輸出爲0,而非null
/**
* @since 1.1
*/
WriteNullBooleanAsFalse,//Boolean字段如果爲null,輸出爲false,而非null
/**
* @since 1.1
*/
SkipTransientField,//如果是true,類中的Get方法對應的Field是transient,序列化時將會被忽略。默認爲true
/**
* @since 1.1
*/
SortField,//按字段名稱排序後輸出。默認爲false
/**
* @since 1.1.1
*/
@Deprecated
WriteTabAsSpecial,//把\t做轉義輸出,默認爲false
/**
* @since 1.1.2
*/
PrettyFormat,//結果是否格式化,默認爲false
/**
* @since 1.1.2
*/
WriteClassName,//序列化時寫入類型信息,默認爲false。反序列化是需用到
/**
* @since 1.1.6
*/
DisableCircularReferenceDetect,//消除對同一對象循環引用的問題,默認爲false
/**
* @since 1.1.9
*/
WriteSlashAsSpecial,//對斜槓'/'進行轉義
/**
* @since 1.1.10
*/
BrowserCompatible,//將中文都會序列化爲\uXXXX格式,字節數會多一些,但是能兼容IE 6,默認爲false
/**
* @since 1.1.14
*/
WriteDateUseDateFormat,//全局修改日期格式,默認爲false。JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
/**
* @since 1.1.15
*/
NotWriteRootClassName,//暫不知,求告知
/**
* @since 1.1.19
*/
DisableCheckSpecialChar,//一個對象的字符串屬性中如果有特殊字符如雙引號,將會在轉成json時帶有反斜槓轉移符。如果不需要轉義,可以使用這個屬性。默認爲false
/**
* @since 1.1.35
*/
BeanToArray //暫不知,求告知
;
private SerializerFeature(){
mask = (1 << ordinal());
}
private final int mask;
public final int getMask() {
return mask;
}
public static boolean isEnabled(int features, SerializerFeature feature) {
return (features & feature.getMask()) != 0;
}
public static int config(int features, SerializerFeature feature, boolean state) {
if (state) {
features |= feature.getMask();
} else {
features &= ~feature.getMask();
}
return features;
}
}
GsonBuilder方法解釋
setFieldNamingPolicy 設置序列字段的命名策略(UPPER_CAMEL_CASE,UPPER_CAMEL_CASE_WITH_SPACES,LOWER_CASE_WITH_UNDERSCORES,LOWER_CASE_WITH_DASHES)
addDeserializationExclusionStrategy 設置反序列化時字段採用策略ExclusionStrategy,如反序列化時不要某字段,當然可以採用@Expore代替。
excludeFieldsWithoutExposeAnnotation 設置沒有@Expore則不序列化和反序列化
addSerializationExclusionStrategy 設置序列化時字段採用策略,如序列化時不要某字段,當然可以採用@Expore代替。
registerTypeAdapter 爲某特定對象設置固定的序列和反序列方式,實現JsonSerializer和JsonDeserializer接口
setFieldNamingStrategy 設置字段序列和反序列時名稱顯示,也可以通過@Serializer代替
setPrettyPrinting 設置gson轉換後的字符串爲一個比較好看的字符串
setDateFormat 設置默認Date解析時對應的format格式