org.springframework.web.accept.MediaTypeFileExtensionResolver 将媒体类型解析为文件扩展名列表的策略。例如,将“application/json”解析为“json”。
org.springframework.web.accept.MappingMediaTypeFileExtensionResolver ediaTypeFileExtensionResolver的实现,它在两个方向上维护文件扩展名和媒体类型之间的查找。最初使用文件扩展名和媒体类型的映射创建。随后子类可以使用addMapping来添加更多的映射。
private final ConcurrentMap<String, MediaType> mediaTypes = new ConcurrentHashMap<String, MediaType>(64);
mediaTypes
org.springframework.web.accept.ContentNegotiationStrategy 用于解析请求的请求媒体类型的策略。这里是策略模式实现。
List<MediaType> resolveMediaTypes(NativeWebRequest webRequest) throws HttpMediaTypeNotAcceptableException;
将给定的请求解析为媒体类型列表。返回的列表首先按照特殊性排序,然后按照质量参数排序。
org.springframework.web.accept.AbstractMappingContentNegotiationStrategy 用于contentnegotiation策略实现的基类,其中包含将请求解析为媒体类型的步骤。首先是一把钥匙。必须从请求(例如文件扩展名、查询参数)中提取“json”、“pdf”。然后,必须通过存储此类映射的基类MappingMediaTypeFileExtensionResolver将键解析为媒体类型。handleNoMatch方法允许子类插入查找媒体类型的其他方法(例如,通过Java激活框架,或者javax.servlet.ServletContext.getMimeType)。然后将通过基类解析的媒体类型添加到基类MappingMediaTypeFileExtensionResolver中,即缓存以进行新查找。
org.springframework.web.accept.AbstractMappingContentNegotiationStrategy#resolveMediaTypes 解析medisType
@Override public List<MediaType> resolveMediaTypes(NativeWebRequest webRequest) throws HttpMediaTypeNotAcceptableException { // 模板方法 return resolveMediaTypeKey(webRequest, getMediaTypeKey(webRequest)); }
这里是模板方法实现。org.springframework.web.accept.AbstractMappingContentNegotiationStrategy#getMediaTypeKey 从请求中提取用于查找媒体类型的键。需要子类实现这个模板方法。
org.springframework.web.accept.AbstractMappingContentNegotiationStrategy#handleMatch 覆盖,以便在通过lookupMediaType成功解析密钥时提供处理。
protected void handleMatch(String key, MediaType mediaType) { }
子类需要实现这个模板方法。
org.springframework.web.accept.PathExtensionContentNegotiationStrategy 一个contentnegotiation策略,它将请求路径中的文件扩展名解析为用于查找媒体类型的键。如果在提供给构造函数的显式注册中没有找到文件扩展名,则使用Java激活框架(Java Activation Framework, JAF)作为回退机制。
JAF的存在会被自动检测并启用,但是setUseJaf(boolean)属性可能被设置为false。
org.springframework.web.accept.ParameterContentNegotiationStrategy 将查询参数解析为用于查找媒体类型的键的contentnegotiation策略。默认参数名是format。
org.springframework.web.accept.ServletPathExtensionContentNegotiationStrategy
private final ServletContext servletContext;
servletContext
org.springframework.web.accept.HeaderContentNegotiationStrategy header context策略实现。
org.springframework.web.accept.FixedContentNegotiationStrategy 固定content策略实现。
org.springframework.web.accept.ContentNegotiationManager 类确定请求的请求媒体类型。这是通过委托给一个已配置contentnegotiation策略实例的列表来实现的。还提供查找媒体类型的文件扩展名的方法。这是通过委托给已配置的MediaTypeFileExtensionResolver实例列表来完成的。
private final List<ContentNegotiationStrategy> strategies = new ArrayList<ContentNegotiationStrategy>();
strategies
private final Set<MediaTypeFileExtensionResolver> resolvers = new LinkedHashSet<MediaTypeFileExtensionResolver>();
resolvers
本次解析仅代表个人观点,仅供参考。
发表评论