java map中的null值處理

目錄

 

Mybatis返回HashMap時,某個字段值爲null時,key消失的問題

如何將map中的null批量轉換成“”

SerializerFeature 中的配置含義

GsonBuilder方法解釋


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格式

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章