MediaTypeFileExtensionResolver
是Spring Web
的策略接口,所定义的策略对象用于从MediaType
推断文件扩展名。
例子 : 如果
MediaType
是application/json
,则文件扩展名为json
。
源代码
源代码版本 : Spring Security Config 5.1.4.RELEASE
package org.springframework.web.accept;
import java.util.List;
import org.springframework.http.MediaType;
/**
* Strategy to resolve MediaType to a list of file extensions.
* For example resolve "application/json" to "json".
*
* @author Rossen Stoyanchev
* @since 3.2
*/
public interface MediaTypeFileExtensionResolver {
/**
* Resolve the given media type to a list of path extensions.
* @param mediaType the media type to resolve
* @return a list of extensions or an empty list (never null)
*/
List<String> resolveFileExtensions(MediaType mediaType);
/**
* Return all registered file extensions.
* @return a list of extensions or an empty list (never null)
*/
List<String> getAllFileExtensions();
}
该接口主要定义了两个方法。List<String> resolveFileExtensions(MediaType mediaType)
方法根据指定的mediaType
返回一组文件扩展名。而List<String> getAllFileExtensions()
方法返回该策略接口中注册的所有文件扩展名。
实现类
MediaTypeFileExtensionResolver
有如下实现类 :
MappingMediaTypeFileExtensionResolver
维护了一个文件扩展名和
MediaType
的双向查找表。
ParameterContentNegotiationStrategy
其实主要是一个
ContentNegotiationStrategy
,根据一个查询参数(query parameter
)判断请求的
MediaType,该查询参数缺省使用
format。 同时也继承自
MediaTypeFileExtensionResolver`。
PathExtensionContentNegotiationStrategy
其实主要是一个
ContentNegotiationStrategy
,根据请求URL
路径中所请求的文件资源的扩展名部分判断请求的MediaType
。
同时也继承自MediaTypeFileExtensionResolver
。
ServletPathExtensionContentNegotiationStrategy
其实主要是一个
ContentNegotiationStrategy
,扩展自PathExtensionContentNegotiationStrategy
,将使用ServletContext#getMimeType(String)
方法判断请求MediaType
的能力也包含进来。
同时也继承自MediaTypeFileExtensionResolver
。
ContentNegotiationManager
一个
ContentNegotiationStrategy
容器,同时也是一个MediaTypeFileExtensionResolver
容器。自身同时实现了这两个接口。调用者对该策略对象所调用的接口功能会并未委托给所包含的ContentNegotiationStrategy
/MediaTypeFileExtensionResolver
计算得到。