SpringMVC源码解析-ContentNegotiationStrategy
来源:互联网 发布:ubuntu软件安装位置 编辑:程序博客网 时间:2024/05/24 15:36
/** * 处理请求中的媒体类型的策略接口 */public interface ContentNegotiationStrategy { /** * 将给定的请求解析为媒体类型列表 * 返回的 List 首先按照 specificity 参数排序,其次按照 quality 参数排序 * * webRequest: 当前的请求 * 返回请求的媒体类型或者是一个空的 List * 如果请求的媒体类型不能被解析则抛出 HttpMediaTypeNotAcceptableException 异常 */ List<MediaType> resolveMediaTypes(NativeWebRequest webRequest) throws HttpMediaTypeNotAcceptableException;}
HeaderContentNegotiationStrategy
负责解析Http Request Header
中的Accept
/** * 检查请求头 Accept 的 ContentNegotiationStrategy 的实现类 */public class HeaderContentNegotiationStrategy implements ContentNegotiationStrategy { /** * 如果 Accept 请求头不能被解析则抛出 HttpMediaTypeNotAcceptableException 异常 */ @Override public List<MediaType> resolveMediaTypes(NativeWebRequest request) throws HttpMediaTypeNotAcceptableException { //获得请求头 Accept 的值 // 形如: "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" String[] headerValueArray = request.getHeaderValues(HttpHeaders.ACCEPT); if (headerValueArray == null) { return Collections.<MediaType>emptyList(); } List<String> headerValues = Arrays.asList(headerValueArray); try { // 将上述媒体类型组成的字符串分离出来 List<MediaType> mediaTypes = MediaType.parseMediaTypes(headerValues); // 将媒体类型排序 MediaType.sortBySpecificityAndQuality(mediaTypes); return mediaTypes; } catch (InvalidMediaTypeException ex) { throw new HttpMediaTypeNotAcceptableException( "Could not parse 'Accept' header " + headerValues + ": " + ex.getMessage()); } }}
调用关系:
private final ContentNegotiationManager contentNegotiationManager;
contentNegotiationManager
保存了ContentNegotiationStrategy
的实现类 private final List<ContentNegotiationStrategy> strategies = new ArrayList<ContentNegotiationStrategy>();
同时也可以看到如果没有传递Accept,则默认使用MediaType.ALL
也就是*/*
参考:
http://blog.csdn.net/ktlifeng/article/details/50570128
阅读全文
0 0
- SpringMVC源码解析-ContentNegotiationStrategy
- Spring-web源码解析之ContentNegotiationStrategy
- springmvc源码解析(1)
- Spring源码解析-springmvc
- SpringMVC源码解析-HandlerInterceptor
- SpringMVC源码解析-LocaleResolver
- SpringMVC源码解析- HandlerAdapter初始化
- springmvc源码解析(2)
- 源码解析:SpringMVC-文件上传
- SpringMVC的DispatchServlet源码解析
- springmvc启动流程源码解析
- 源码深度解析SpringMvc请求运行机制
- 深入springMVC------文件上传源码解析(上篇)
- SpringMVC执行流程及源码解析
- SpringMVC执行流程及源码解析
- SpringMVC 执行流程及源码解析
- SpringMVC 执行流程及源码解析
- SpringMVC执行流程及源码解析
- JAVA调试技巧
- java基础之—HashSet集合学习笔记
- 第十章g2oBA的g2o_bal_class.h
- JSP-复习材料二: Servlet运用
- Eclipse设置tomcat/bin为当前目录
- SpringMVC源码解析-ContentNegotiationStrategy
- LPC812MO 我的学习历程
- 客户细分通过自定义维度
- Oracle SQL练习
- Amazon S3介绍及实例util
- 关于Intellij IDEA的常用初始化配置
- 如何为不同的硬件配置选择合适的图表开发工具?
- Windows下C++ 串口编程实例
- 【JavaScript学习】面向对象的程序设计(1)