为何我的REST服务DispatcherServlet无需配置Http2MessageConverter?
为什么你的DispatcherServlet不需要手动配置HttpMessageConverter?
嘿,这个问题问到点子上了!其实你不用手动配置HttpMessageConverter(比如MappingJackson2HttpMessageConverter这类),核心原因是Spring MVC的自动配置机制已经帮你搞定了这件事,具体可以拆成这几点来看:
- 依赖驱动的自动注册:只要你的项目classpath中存在JSON处理库(最常见的就是Jackson的
jackson-databind),Spring MVC在启动时会自动检测到这些依赖,然后自动注册对应的HttpMessageConverter实现,用来处理Java对象和JSON(或其他格式)之间的序列化/反序列化。 - 默认配置类的加持:不管你是用
@EnableWebMvc注解还是传统的XML配置,Spring MVC的底层配置类(比如WebMvcConfigurationSupport)已经内置了转换器的自动注册逻辑。DispatcherServlet初始化时会加载这些默认配置,所以你不用在Servlet的XML配置里重复定义。 - 上下文继承的作用:你配置了
ContextLoaderListener加载根Web上下文,DispatcherServlet的子上下文会继承根上下文里的Bean定义和配置,包括那些自动注册的消息转换器,进一步保证了对象返回时的序列化能力。
当然,也有需要手动配置的场景:比如你要自定义JSON的序列化规则(比如统一日期格式、忽略特定字段、使用自定义的ObjectMapper),这时候你才需要手动创建并配置HttpMessageConverter,替换掉默认的实现。
内容的提问来源于stack exchange,提问作者Orubasa Victor
相关产品推荐
相关产品推荐

