javamap中的null值处理
⽬录
Mybatis返回HashMap时,某个字段值为null时,key消失的问题
在l⽂件中设置
<configuration>
<settings>
<!--解决,查询返回结果含null没有对应字段值问题-->fastjson忽略属性
<setting name="callSettersOnNulls" value="true"/>
</settings>
</configuration>
springboot待实现
如何将map中的null批量转换成“”
继承ObjectMapper类,重新序列化逻辑
package com.anran.projectmanage.util;
import com.JsonGenerator;
import com.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();
@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<szujobs@hotmail>
*/
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
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";JSONString(obj, SerializerFeature.Wr
/**
* @since 1.1.15
*/
NotWriteRootClassName,//暂不知,求告知
/**
* @since 1.1.19
*/
DisableCheckSpecialChar,//⼀个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使⽤这个属性。默认为
/**
* @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 & Mask()) != 0;
}
public static int config(int features, SerializerFeature feature, boolean state) {
if (state) {
features |= Mask();
} else {
features &= ~Mask();
}
return features;
}
}
GsonBuilder⽅法解释
setFieldNamingPolicy 设置序列字段的命名策略(UPPER_CAMEL_CASE,UPPER_CAMEL_CASE_WITH_SPACES,LOWER_CASE_WITH_UNDERSCORES,LOWER addDeserializationExclusionStrategy 设置反序列化时字段采⽤策略ExclusionStrategy,如反序列化时不要某字段,当然可以采⽤@Expore代替。excludeFieldsWithoutExposeAnnotation 设置没有@Expore则不序列化和反序列化
addSerializationExclusionStrategy 设置序列化时字段采⽤策略,如序列化时不要某字段,当然可以采⽤@Expore代替。
registerTypeAdapter 为某特定对象设置固定的序列和反序列⽅式,实现JsonSerializer和JsonDeserializer接⼝
setFieldNamingStrategy 设置字段序列和反序列时名称显⽰,也可以通过@Serializer代替
setPrettyPrinting 设置gson转换后的字符串为⼀个⽐较好看的字符串
setDateFormat 设置默认Date解析时对应的format格式

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。