Spring Web : 策略接口 MediaTypeFileExtensionResolver

MediaTypeFileExtensionResolverSpring Web的策略接口,所定义的策略对象用于从MediaType 推断文件扩展名。

例子 : 如果MediaTypeapplication/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计算得到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值