Spring Web : 策略接口 ContentNegotiationStrategy

本文详细介绍了SpringWeb框架中ContentNegotiationStrategy接口及其实现类,包括FixedContentNegotiationStrategy、HeaderContentNegotiationStrategy等,探讨了它们如何处理请求的MediaType,为理解SpringWeb的内容协商策略提供了深入的视角。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ContentNegotiationStrategySpring Web的策略接口,所定义的策略对象用于从请求对象中的各种信息判断该请求的MediaType

源代码

源代码版本 : Spring Security Config 5.1.4.RELEASE

package org.springframework.web.accept;

import java.util.Collections;
import java.util.List;

import org.springframework.http.MediaType;
import org.springframework.web.HttpMediaTypeNotAcceptableException;
import org.springframework.web.context.request.NativeWebRequest;

/**
 * A strategy for resolving the requested media types for a request.
 *
 * @author Rossen Stoyanchev
 * @since 3.2
 */
@FunctionalInterface
public interface ContentNegotiationStrategy {

	/**
	 * A singleton list with MediaType#ALL that is returned from
	 * #resolveMediaTypes when no specific media types are requested.
	 * @since 5.0.5
	 */
	List<MediaType> MEDIA_TYPE_ALL_LIST = Collections.singletonList(MediaType.ALL);


	/**
	 * Resolve the given request to a list of media types. The returned list is
	 * ordered by specificity first and by quality parameter second.
	 * @param webRequest the current request
	 * @return the requested media types, or #MEDIA_TYPE_ALL_LIST if none
	 * were requested.
	 * @throws HttpMediaTypeNotAcceptableException if the requested media
	 * types cannot be parsed
	 */
	List<MediaType> resolveMediaTypes(NativeWebRequest webRequest)
			throws HttpMediaTypeNotAcceptableException;

}

由以上接口源代码可以看出,ContentNegotiationStrategy主要定义了一个方法List<MediaType> resolveMediaTypes(NativeWebRequest webRequest)。该方法接受一个参数NativeWebRequest webRequest,表示请求对象,该方法的实现要分析该请求对象获得他的MediaType列表。

实现类

接口ContentNegotiationStrategy有如下实现类 :

  • FixedContentNegotiationStrategy

该策略对象创建时固定了一组MediaType,不管请求对象是什么,都返回这组MediaType

  • HeaderContentNegotiationStrategy

该策略对象分析请求头部Accept 得出该请求的一组MediaType,如果请求头部Accept未设置,返回的MediaType只包含*/*

  • ParameterContentNegotiationStrategy

根据一个查询参数(query parameter)判断请求的MediaType,该查询参数缺省使用format`。

  • PathExtensionContentNegotiationStrategy

根据请求URL 路径中所请求的文件资源的扩展名部分判断请求的MediaType

  • ServletPathExtensionContentNegotiationStrategy

扩展自PathExtensionContentNegotiationStrategy,将使用ServletContext#getMimeType(String)方法判断请求MediaType的能力也包含进来

  • ContentNegotiationManager

一个ContentNegotiationStrategy容器,同时也是一个MediaTypeFileExtensionResolver容器。自身同时实现了这两个接口。调用者对该策略对象所调用的接口功能会并未委托给所包含的ContentNegotiationStrategy/MediaTypeFileExtensionResolver计算得到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值