Mybatis-plus 空值不返回问题
最近springBoot项目mybatis获取字段为null时候返回前端不显示,这不是我想要的结果。我想要结果无论null还是空字段串都给前端返回字段。
@Configuration
@EnableWebMvc
public class GlobalResourceConfig implements WebMvcConfigurer {
/**
* 使用阿里 FastJson 作为JSON MessageConverter
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
//保留空的字段
config.setCharset(StandardCharsets.UTF_8);
config.setSerializerFeatures(SerializerFeature.WriteMapNullValue,SerializerFeature.WriteDateUseDateFormat,SerializerFeature.PrettyFormat,SerializerFeature.WriteMapNullValue);
//SerializerFeature.PrettyFormat 这是格式化返回前端
//SerializerFeature.WriteMapNullValue 这是mybatis-plus 查询到以后不管有没有值都返回给前端
// SerializerFeature.WriteNullStringAsEmpty,//String null -> "" 这是String类型如果为null则返回""
// SerializerFeature.WriteNullNumberAsZero//Number null -> 0这是Number类型如果为null则返回0
// 格式化输出
//SerializerFeature.PrettyFormat,
// 消除循环引用
//SerializerFeature.DisableCircularReferenceDetect,
// 返回结果保留null值
//SerializerFeature.WriteMapNullValue,
// 将返回值为null的字符串转变成"",在这里可以自己设置
//SerializerFeature.WriteNullStringAsEmpty,
// List字段如果为null,输出为[],而非null
//SerializerFeature.WriteNullListAsEmpty
// 解决 SerializerFeature.WriteNullStringAsEmpty 不生效问题
ValueFilter valueFilter = (object, name, value) -> {
if (null == value){
value = "";
}
return value;
};
// 设置全局日期格式
//fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
// 注入过滤器
//fastJsonConfig.setSerializeFilters(valueFilter);
// Long、BigDecimal 序列化时转 String
//SerializeConfig serializeConfig = SerializeConfig.globalInstance;
//serializeConfig.put(Long.class, ToStringSerializer.instance);
//serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
//serializeConfig.put(BigDecimal.class, ToStringSerializer.instance);
// 在转换器中添加配置信息
//fastJsonConfig.setSerializeConfig(serializeConfig);
//fastConverter.setDefaultCharset(StandardCharsets.UTF_8);
//fastConverter.setFastJsonConfig(fastJsonConfig);
// 解决中文乱码问题,相当于在Controller上的@RequestMapping中加了个属性produces = "application/json"
//List<MediaType> mediaTypeList = new ArrayList<>();
//mediaTypeList.add(MediaType.APPLICATION_JSON);
//fastConverter.setSupportedMediaTypes(mediaTypeList);
//return new HttpMessageConverters(fastConverter);
//处理中文乱码问题 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
SerializerFeature.PrettyFormat:格式化输出
SerializerFeature.WriteMapNullValue:是否输出值为null的字段,默认为false
SerializerFeature.DisableCircularReferenceDetect:消除循环引用
SerializerFeature.WriteNullStringAsEmpty:将为null的字段值显示为""
WriteNullListAsEmpty:List字段如果为null,输出为[],而非null
WriteNullNumberAsZero:数值字段如果为null,输出为0,而非null
WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
SkipTransientField:如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true
SortField:按字段名称排序后输出。默认为false
WriteDateUseDateFormat:全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
BeanToArray:将对象转为array输出
QuoteFieldNames:输出key时是否使用双引号,默认为true
UseSingleQuotes:输出key时使用单引号而不是双引号,默认为false(经测试,这里的key是指所有的输出结果,而非key/value的key,而是key,和value都使用单引号或双引号输出)
// 按需配置,更多参考FastJson文档哈
MediaType[] mediaTypes = new MediaType[]{
MediaType.APPLICATION_OCTET_STREAM,
MediaType.APPLICATION_JSON,
MediaType.TEXT_HTML,
MediaType.TEXT_PLAIN,
MediaType.TEXT_XML,
MediaType.APPLICATION_STREAM_JSON,
MediaType.APPLICATION_ATOM_XML,
MediaType.APPLICATION_FORM_URLENCODED,
MediaType.APPLICATION_PDF,
};
converter.setSupportedMediaTypes(Arrays.asList(mediaTypes));
converter.setFastJsonConfig(config);
converter.setDefaultCharset(StandardCharsets.UTF_8);
// converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON_UTF8));
converters.add(new ByteArrayHttpMessageConverter());
converters.add(converter);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/script/**").addResourceLocations("classpath:/script/");
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
二 配置信息
名称 | 含义 |
QuoteFieldNames | 输出key时是否使用双引号,默认为true |
UseSingleQuotes | 使用单引号而不是双引号,默认为false |
WriteMapNullValue | 是否输出值为null的字段,默认为false |
WriteEnumUsingToString | Enum输出name()或者original,默认为false |
UseISO8601DateFormat | Date使用ISO8601格式输出,默认为false |
WriteNullListAsEmpty | List字段如果为null,输出为[],而非null |
WriteNullStringAsEmpty | 字符类型字段如果为null,输出为”“,而非null |
WriteNullNumberAsZero | 数值字段如果为null,输出为0,而非null |
WriteNullBooleanAsFalse | Boolean字段如果为null,输出为false,而非null |
SkipTransientField | 如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true |
SortField | 按字段名称排序后输出。默认为false |
WriteTabAsSpecial | 把\t做转义输出,默认为false |
PrettyFormat | 结果是否格式化,默认为false |
WriteClassName | 序列化时写入类型信息,默认为false。反序列化是需用到 |
DisableCircularReferenceDetect | 消除对同一对象循环引用的问题,默认为false |
WriteSlashAsSpecial | 对斜杠’/’进行转义 |
BrowserCompatible | 将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false |
WriteDateUseDateFormat | 全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat); |
DisableCheckSpecialChar | 一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false |
NotWriteRootClassName | 不知道 |
BeanToArray | 将对象转为array输出 |
WriteNonStringKeyAsString | 不是String的字段写为String |
NotWriteDefaultValue | 不设默认值 |
BrowserSecure | 不知道 |
IgnoreNonFieldGetter | 忽略没有getter方法的属性 |
WriteEnumUsingName |
目前版本的fastjson默认对enum对象使用WriteEnumUsingName属性,因此会将enum值序列化为其Name。 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库