SpringBoot自定义序列化的使用方式--WebMvcConfigurationSupport_一枝花算不算浪漫的博客-程序员宝宝

场景及需求: 项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。

例如:
[
     {
         "id": 1,
         "name": null
     },
     {
         "id": 2,
         "name": "xiaohong"
     }
]

如上,格式化后的返回内容应该为:
[
     {
         "id": 1,
         "name": ""
     },
     {
         "id": 2,
         "name": "xiaohong"
     }
]

 

这里直接给出解决方案代码,这里支持FastJson和Jackson配置序列化的方式:

@Configuration
public class WebCatMvcConfiguration extends WebMvcConfigurationSupport {

@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(new ToStringSerializer(Long.TYPE));
module.addSerializer(new ToStringSerializer(Long.class));
module.addSerializer(new ToStringSerializer(BigInteger.class));
objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString("");
}
});
objectMapper.registerModule(module);
converter.setObjectMapper(objectMapper);

//这里是fastJSON的配置方式,更多的内容可以查看SerializerFeature
// FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
// converter.setFeatures(SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullNumberAsZero,
// SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNullListAsEmpty);
converters.add(converter);
}
}



最后我们也可以了解一下:WebMvcConfigurationSupport类
下面是它的官方文档描述:

public class WebMvcConfigurationSupport
extends Object
implements ApplicationContextAware, ServletContextAware
This is the main class providing the configuration behind the MVC Java config. It is typically imported by adding @EnableWebMvc to an application @Configuration class. An alternative more advanced option is to extend directly from this class and override methods as necessary remembering to add @Configuration to the subclass and @Bean to overridden @Bean methods. For more details see the Javadoc of @EnableWebMvc.

This class registers the following HandlerMappings:

 

Registers these HandlerAdapters:

Registers a HandlerExceptionResolverComposite with this chain of exception resolvers:

Registers an AntPathMatcher and a UrlPathHelper to be used by:

Note that those beans can be configured with a PathMatchConfigurer.

Both the RequestMappingHandlerAdapter and the ExceptionHandlerExceptionResolver are configured with default instances of the following by default:

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012881584/article/details/105672987

智能推荐

LeetCode 89. 格雷编码 Python 一行代码解法_arry_lee的博客-程序员宝宝

题目:格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例 1:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 - ...

测量_chenjinwei0913的博客-程序员宝宝

* {@link #onCreate} is where you initialize your activity. Most * importantly, here you will usually call {@link #setContentView(int)} * with...

王垠:自动编程是不可能的 我为什么不在乎人工智能录标题_大波波。的博客-程序员宝宝

(王垠:自动编程是不可能的 我为什么不在乎人工智能录标题)  文/王垠  有人听说我想创业,给我提出了一些“忽悠”的办法。他们说,既然你是程序语言专家,而现在人工智能(AI)又非常热,那你其实可以搞一个“自动编程系统”,号称可以自动生成程序,取代程序员的工作,节省许许多多的人力支出,这样就可以趁着“AI...

微信小游戏上线发布全流程详解_Clank的游戏栈的博客-程序员宝宝_微信小游戏上线流程

5G时代小游戏群雄并起5G时代到来,各大超级App都推出了小游戏模式来把流量变现,微信小游戏,QQ小游戏,抖音小游等。之前个人开发者在国内上线游戏,需要版号,到国外又不熟悉,微信/QQ/抖音小游戏给了个人开发者制作游戏之路,不用版号即可上线发布运营自己的游戏。很多个人开发者跃跃欲试,很多中小型游戏公司也发力在此。 到底小游戏如何上线与发布,各大平台都差不多,今天我们以微信小游戏上线发布为例,完整的讲解小游戏上线发布全流程。这里有个小游戏开发学习交流小组点击可以直接加入,一起学习交流吧制作小游戏

SVN服务端命令行的使用心得_clever101的博客-程序员宝宝

作者:朱金灿来源:http://blog.csdn.net/clever101        SVN是常用的源码管理工具。今天在服务器端使用SVN创建版本库和用户出现了一些问题,特总结一些经验教训。 在服务器端创建版本库的命令很简单,如下:在命令行模式下,运行命名:svnadmin create d:/svnRoot/TCM,即可在d盘下创建一个版本库vwas。 创建了版本库后第一步是如何禁止匿名

html object标签播放视频(非H5)以及后台提供视频播放地址接口_浮梦丶天拓_新浪博客..._孤海岛主的博客-程序员宝宝

html代码:代码​说明:url:为视频的地址。(可以是一个请求视频的接口)注意:视频播放时是按照视频的比例显示的,所以设置视频播放的容器时,会发现视频播放窗口比较小的问题,可能是因为容器的长度,或者宽度的限制导致的。​后台代码(springMVC+java):图片中参数url为服务器的视频地址,此接口供外部浏览器访问视频地址使用​​此外...

随便推点

苹果Mac电脑怎么卸载软件?_阡陌_(:з」∠)_的博客-程序员宝宝_苹果电脑怎么卸载软件

一、打开苹果Mac电脑,在底部程序坞中找到访达;二、打开访达后,左侧“应用程序”进入,找到要卸载的应用程序软件右键:移到废纸篓。三、如遇到提示:不能将项目移到废纸篓,因为已打开。四、请回到苹果Mac桌面,在程序坞找到要卸载的应用程序软件,右键选择退出。五、退出要卸载的软件后,再次返回到应用程序右键移到废纸篓即可卸载软件,但是在程序坞中还会存在,并未彻底卸载软件。请右键:选择&gt;从程序坞中移除即可彻底卸载应用程序软件。...

Airflow 1.10.10 constraint file_githan的博客-程序员宝宝_warning: constraint file is from a different desig

# Editable install with no version control (apache-airflow==1.10.10)Babel==2.8.0Flask-Admin==1.5.4Flask-AppBuilder==2.3.0Flask-Babel==1.0.0Flask-Bcrypt==0.7.1Flask-Caching==1.3.3Flask-JWT-Extended==3.24.1Flask-Login==0.4.1Flask-OpenID==1.2.5Flask

一、JavaScript(JS)简介_思维的基石的博客-程序员宝宝

互联网上最流行的脚本,可用于HTML和WEB以及服务器、PC等设备。  特点:  一种轻量级、基于原型的面向对象、解释型、不需要编译、语法结构类似C、java的编程语言,可插入HTML页面。HTML 定义了网页的内容,CSS 描述了网页的布局,JavaScript 网页的行为。  组成:  ES(ECMAScript) —规定了JS的一些基础核心的知识(变量、数量类型、语法规范、操作语言等...

Android学习笔记4--XmlPullParser的使用_analysefang的博客-程序员宝宝_.equals(parser.nextrecord().get(0))

xml文件的解析器XmlPullParser,解析一个xml文件 1.获取解析器对象 2.设置解析器的参数 3.获取解析的事件类型 4.判断事件类型进行解析的逻辑public static List<Channel> parserXml(InputStream in) throws Exception{ //[0]声明集合对象

常用功能自动化测试工具汇总_中国软件测试质量协会的博客-程序员宝宝_以下属于功能自动化测试工具的是

话说自动化测试方面的工具还是非常的多的,不可能也没有必要查看了所有的测试工具;个人觉得当学习众多同类知识或相关主题时,分几步走:1、学习所有同类知识的共同理论、原理部分【此为共性】2、学习所有同类知识的独有特性、技巧部分【此为个性】3、根据具体的实际场景,适当的运用所学知识的【即运用知识的个性部分去解决特定的问题】学习自动化测试工具也是这样的,之前不愿意学习太多是怕混淆视听,现在对原有知识...

记录一下:解决URLDownloadToFile缓存问题的两种方法_三杨的博客-程序员宝宝_urldownloadtofile

URLDownloadToFile下载文件前先在本地的缓存中查找此文件如果缓存有则不会再去网上抓最新的文件,所以我们还要解决URLDownloadToFile缓存的问题。方法 1:我们可以对URL进行改动,让它每次访问不同的URL但指向相同的页面,例如在URL结尾添加一些无意义的参数:"http://www.dtapp.cn?abc=1"这里的 ?abc=1 可以随机实现,下次下载则改成 ?abc=2 因为URL不同,所以不会在缓存中找到。最后程序改成:/**************.

推荐文章

热门文章

相关标签