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> ...
随机推荐
- django项目环境搭建
本文转载自: https://blog.csdn.net/xiaogeldx/article/details/89038299 在码云平台创建项目 版本控制的种类 主要使用github(最主流) 国内 ...
- 【AO笔记】Addins的Toolbar 添加一条分割线
在XAML中,给Item标签添加separator属性,需要从哪里打分割线,就将其设置为true即可.如下图所示: 如紫色框住的灰色竖线所示. 默认separator属性是false的,这个小东西极其 ...
- iPad----------教你如何查询ipad型号
1.首先进入苹果官网 找到support https://support.apple.com 2.找到查询ipad型号的地方 点击Check coverage for your produc ...
- Android的WebView调试工具(无需Fan墙,可同时调试多个设备,永不过期)
缘起 前端开发离不开Chrome的开发者工具,尤其是调试Android WebView时.然而,如果使用chrome://Inspect的方法,国内的开发者会惊奇地发现“空白啊”!为此,我发布过这个离 ...
- Android注解神器 ButterKnife框架
前言: 本人是一个只有几个月工作经验的码小渣.这是我写的第一篇博客,如有不足之处还请大家不要介意,还请大佬可以指出问题. 在这几个月的实战开发中自己也遇到了很多问题,真的是举步艰难啊!!! 在实战开发 ...
- JMeter接口测试 (二) ~ 参数化
对应qq群号:616961231 上篇内容介绍了jmeter的基本使用, 略微提了如何做参数化, 本篇对参数化做进一步深入讲解, 参数化可以将一个变量使用不同数据, 比如有多个用户下单购买商品,调用 ...
- 【原创】Windows平台下Git的安装与配置
一.下载 msysgit是Git for Windows版,其Home Page为:http://msysgit.github.io/ 点击页面中“Download”进入下载列表.可根据个人喜 ...
- https协议详解
HTTPS协议建立过程 1) 客户端首次发送请求时,由于客户端(浏览器等)对一些加解密算法的支持程度不一样,但是在TLS传输中必须使用相同的加解密算法,所以在TLS握手的阶段,客户端告诉服务器端自己支 ...
- SQLServer之删除触发器
删除触发器 注意事项 可以通过删除DML触发器或删除触发器表来删除DML触发器. 删除表时,将同时删除与表关联的所有触发器. 删除触发器时,会从 sys.objects.sys.triggers 和 ...
- LeetCode算法题-Fibonacci Number(Java实现)
这是悦乐书的第250次更新,第263篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第117题(顺位题号是509).Fibonacci数字,通常表示为F(n),形成一个称为 ...