spring容器启动时,MappingJackson2HttpMessageConverter进行了初始化

 public void run() {
	runSafely(new ConversionServiceInitializer());
	runSafely(new ValidationInitializer());

    //第3步 HttpMessageConverter进行了初始化
	runSafely(new MessageConverterInitializer());

    runSafely(new JacksonInitializer());
	runSafely(new CharsetInitializer());
	preinitializationComplete.countDown();

}

1、HttpMessageConverter是什么

一个使用了策略模式的接口,可以简单理解为一个接口。从http请求中解析或者将数据放入http中返回

之前默认是使用FormHttpMessageConverter,尤其是xml盛行阶段,现在都使用json格式传输数据,所以新增了支持json的类AllEncompassingFormHttpMessageConverter,作为formhttp的扩展。对于json数据的操作则使用了jackson框架,springboot自动配置中会判断类加载器中是否已经加载了jackson相关的包,判断的结果一直存放在内存中,等待MessageConverter初始化的时机开始进行对应的初始化。

//这段代码就是判断类加载器是否加载相应的类,如果已经加载过了,会对相应的标志位进行调整
static {
		ClassLoader classLoader = AllEncompassingFormHttpMessageConverter.class.getClassLoader();
		jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader);
		jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) &&
						ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader);
		jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader);
		jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader);
		gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader);
		jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader);
}

2、具体的初始化

2.1 SourceHttpMessageConverter初始化

它是HttpMessageConverter的具体实现类&

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值