spring-web源码解析之MappingMediaTypeFileExtensionResolver

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 基于4.1.7.RELEASE该类实现了MediaTypeFileExtensionResolver接口,那么实现根据MediaType获取后缀名的方法是必不可少了,那么它跟ContentNegotiationManager有什么区别呢?可以下面几个方法protected List getAllMediaTypes() { return new ArrayList(this.mediaTypes.values());}获取所有的MediaType。

基于4.1.7.RELEASE

该类实现了MediaTypeFileExtensionResolver接口,那么实现根据MediaType获取后缀名的方法是必不可少了,那么它跟ContentNegotiationManager有什么区别呢?可以下面几个方法

protected List<MediaType> getAllMediaTypes() {
   return new ArrayList<MediaType>(this.mediaTypes.values());
}
获取所有的MediaType。
protected MediaType lookupMediaType(String extension) {
   return this.mediaTypes.get(extension);
}

根据后缀名查找对应的MediaType。

注意上面两个方法中都用到了this.mediaTypes,这是一个ConcurrentMap,主要负责存储后缀名和MediaType的对应关系,同时还需要判断该对应关系的唯一性,通过其判断的结果来设置内部的后缀名列表,避免出现重复的情况。

protected void addMapping(String extension, MediaType mediaType) {
   MediaType previous = this.mediaTypes.putIfAbsent(extension, mediaType);
   if (previous == null) {
      this.fileExtensions.add(mediaType, extension);
      this.allFileExtensions.add(extension);
   }
}

由此可见,采用ConcurrentMap是为了避免出现并发情况下导致的一致性问题。

解析到这里,那么这个类的作用便很好判断了。该类的作用可以描述如下

1 给你一个MediaType和后缀extension的对应列表,里面可能有重复的,你负责存起来并且保证不出现重复的extension。

2 给我找出所有的extension或者某个MediaType对应的extension。

3 给我找出所有的MediaType或者某个extension对应的MediaType。

目录
相关文章
|
8天前
|
运维 负载均衡 安全
深度解析:Python Web前后端分离架构中WebSocket的选型与实现策略
深度解析:Python Web前后端分离架构中WebSocket的选型与实现策略
38 0
|
16小时前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
|
1天前
|
存储 Java API
从源码角度解析ArrayList.subList的几个坑!
从源码角度解析ArrayList.subList的几个坑!
|
7天前
|
设计模式 JavaScript Java
Spring 事件监听机制源码
Spring 提供了事件发布订阅机制,广泛应用于项目中。本文介绍了如何通过自定义事件类、订阅类和发布类实现这一机制,并展示了如何监听 SpringBoot 启动过程中的多个事件(如 `ApplicationStartingEvent`、`ApplicationEnvironmentPreparedEvent` 等)。通过掌握这些事件,可以更好地理解 SpringBoot 的启动流程。示例代码展示了从事件发布到接收的完整过程。
|
7天前
|
缓存 Java Spring
源码解读:Spring如何解决构造器注入的循环依赖?
本文详细探讨了Spring框架中的循环依赖问题,包括构造器注入和字段注入两种情况,并重点分析了构造器注入循环依赖的解决方案。文章通过具体示例展示了循环依赖的错误信息及常见场景,提出了三种解决方法:重构代码、使用字段依赖注入以及使用`@Lazy`注解。其中,`@Lazy`注解通过延迟初始化和动态代理机制有效解决了循环依赖问题。作者建议优先使用`@Lazy`注解,并提供了详细的源码解析和调试截图,帮助读者深入理解其实现机制。
12 1
|
16小时前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
1天前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
4 0
|
1天前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
3 0
|
2天前
|
存储 缓存 Java
HashMap源码解析
HashMap源码解析
|
7天前
|
监控 数据可视化 搜索推荐
医院绩效核算系统源码开发,平衡计分卡在绩效管理中的应用解析
医院绩效核算系统是专为医疗机构设计的系统,通过科学方法评估科室和员工绩效,与HIS系统集成,确保数据准确实时。核心功能包括战略导向配置、现代技术架构、自动数据集成、灵活绩效核算机制及模块化管理,支持RBRVS、DRGs等多种考核方法,确保全面科学评估。采用平衡计分卡等工具,实现多维度绩效管理,促进组织持续改进与发展。

推荐镜像

更多