Spring MVC 使用介绍(七)—— 注解式控制器(三):生产者与消费者模型
一、MIME类型
MIME类型格式:type/subtype(;parameter)?
- type:主类型,任意的字符串,如text,如果是*号代表所有
- subtype:子类型,任意的字符串,如html,如果是*号代表所有
- parameter:可选参数,如Accept请求头的q参数, Content-Type的 charset参数
几个常见的MIME类型如:
- HTML:text/html
- 表单数据:application/x-www-form-urlencoded
- JSON数据:application/json
- GIF图片:image/gif
tomcat主目录下conf/web.xml中指定了服务器支持的所有MIME类型
二、生产者与消费者模型
1、Content-Type与Accept
i)Content-Type:内容类型,即请求/响应的内容区数据的MIME类型,如:
Content-Type: application/x-www-form-urlencoded
Content-Type: application/json;charset=UTF-8
ii)Accept:用来指定浏览器可接受的MIME类型,服务器应该根据Accept请求头生产指定MIME类型的数据,多个类型以逗号分隔,如:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
2、生产者与消费者
请求阶段:客户端是生产者(生产Content-Type媒体类型的请求内容区数据),服务器是消费者(消费客户端生产的Content-Type媒体类型的请求内容区数据)
响应阶段:服务器是生产者(生产客户端请求头参数Accept指定的响应体数据),客户端是消费者(消费服务器根据Accept请求头生产的响应体数据)
从服务端的视角,功能处理方法是请求的消费者(请求包的Content-Type头指定),是响应的生产者(请求包的Accept头指定),由此抽象出生产者和消费者模型
@RequestMapping提供consumes、produces这两个属性,用于实现该模型,使用示例如下:
// 等价于:headers = {"Content-Type=application/x-www-form-urlencoded"}
@RequestMapping(value = "/head2", consumes = {"application/x-www-form-urlencoded"})
@ResponseBody
public String testHeader2() {
return "testHeader2";
}
// 等价于:headers = {"Accept=application/json;charset=UTF-8"}
@RequestMapping(value = "/head3", produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String testHeader3() {
return "testHeader3";
}
3、生产者与消费者窄化时是覆盖而非继承
@Controller
@RequestMapping(consumes = "text/html")
public class TestController4 { @RequestMapping(value = "/narrow", consumes = "application/x-www-form-urlencoded")
@ResponseBody
public String testNarrow() {
return "narrow";
}
}
请求时,Content-Type为"text/html"报404,为"application/x-www-form-urlencoded"可正常响应
@RequestMapping的其他属性为继承关系,如headers、params等
参考:
Spring MVC 使用介绍(七)—— 注解式控制器(三):生产者与消费者模型的更多相关文章
- Spring MVC (二)注解式开发使用详解
MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册. 只需在代码中通过对类与方法的注解, 即可完成注册. 定义处理器 @Controller: 当前类为处理器 @ ...
- Spring MVC 使用介绍(五)—— 注解式控制器(一):基本介绍
一.hello world 相对于基于Controller接口的方式,基于注解方式的配置步骤如下: HandlerMapping 与HandlerAdapter 分别配置为RequestMapping ...
- Spring MVC 使用介绍(六)—— 注解式控制器(二):请求映射与参数绑定
一.概述 注解式控制器支持: 请求的映射和限定 参数的自动绑定 参数的注解绑定 二.请求的映射和限定 http请求信息包含六部分信息: ①请求方法: ②URL: ③协议及版本: ④请求头信息(包括Co ...
- spring(6)--注解式控制器
6.1.注解式控制器简介 一.Spring2.5之前,我们都是通过实现Controller接口或其实现来定义我们的处理器类.已经@Deprecated. 二.Spring2.5引入注解式处理器支持 ...
- spring(7)--注解式控制器的数据验证、类型转换及格式化
7.1.简介 在编写可视化界面项目时,我们通常需要对数据进行类型转换.验证及格式化. 一.在Spring3之前,我们使用如下架构进行类型转换.验证及格式化: 流程: ①:类型转换:首先调用Proper ...
- 2017.3.31 spring mvc教程(七)多视图控制器
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- Spring MVC 使用介绍(十三)数据验证 (一)基本介绍
一.消息处理功能 Spring提供MessageSource接口用于提供消息处理功能: public interface MessageSource { String getMessage(Strin ...
- 03springMVC注解式控制器开发
注解式控制器开发简介 注解式控制器开发HelloWorld HelloWorld的运行流程 处理器定义 REST简介 URL路径映射 数据绑定 不同的Model有相同的属性的处理 静态资源的处理 1 ...
- SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解
SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解 博客分类: 跟开涛学SpringMVC 6.6.2.@RequestParam绑定单个请求参数值 @RequestParam用于 ...
- Spring MVC 使用介绍(十四)文件上传下载
一.概述 文件上传时,http请求头Content-Type须为multipart/form-data,有两种实现方式: 1.基于FormData对象,该方式简单灵活 2.基于<form> ...
随机推荐
- JavaScript知识点 思维导图
javascript变量 javascript数据类型 javascript运算符 javascript流程语句 javascript数组 javascript字符串函数 javascript函数基础 ...
- 小tips:path的join和resolve的使用区别
1.连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字符串.要连接的多个路径可做为参数传入. path.join()方法在 ...
- 国外线下技术俱乐部建设(1) - Belgrade Python技术俱乐部2019-01-25活动感悟
这是<国外线下技术俱乐部建设>系列文章之一. 虽然之前接触过Belgrade的.NET技术俱乐部,但是它最近活动要春节后了. 出于观摩别人是怎么搞线下社区的心态,还有自己也有在用Pyt ...
- 18-10-31 Scrum Meeting 3
1.会议照片 2.每人的工作 昨天完成的工作 1 制定配置 修改配置 查询配置这三个接口 2 3 获取单词对应的中文释义 4 完成测验的部分接口 5 后端对接计划的接口 6 剩余的 ...
- Asp.Net Core 实现谷歌翻译ApI 免费版
由于谷歌翻译官方API是付费版本,本着免费和开源的精神.分享一下用 Net Core 实现谷歌翻译API的代码. 项目引用的Nuget 包: ChakraCore.NET Newtonsoft.Jso ...
- win 10 Hbuilder1.2.1连接Genymotion 调试Android 软件
这里记录一下 Hbuilder1.2.1连接Genymotion 调试Android 软件 的过程: 步骤一:把Genymotion 的 adb.exe 路径配置到 Hbuilder 中 在 菜单栏 ...
- tomcat报异常Invalid character found in method name. HTTP method names must be tokens
最近监控了一下测试环境的日志,突然出现如下一个异常 由Error parsing HTTP request header可以看出是由于解析请求头出错导致的,但是它属于DEBUG级别的异常,虽然不影响系 ...
- 新建swap分区的规划、挂载和自动挂载示例
注:来自Linux系统管理_磁盘分区和格式化的扩展 Linux系统管理_磁盘分区和格式化:http://murongqingqqq.blog.51cto.com/2902694/1361918 思路: ...
- 文本分类实战(二)—— textCNN 模型
1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...
- Jenkins pipeline:pipeline 语法详解
jenkins pipeline 总体介绍 pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化. ...