目录
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<szujobs@hotmail.com>
*/
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格式