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计算得到。
MediaTypeFileExtensionResolver解析

被折叠的 条评论
为什么被折叠?



