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> ...
随机推荐
- set用法小结
set本质上是一棵红黑树,用法也就那么几个,插入删除lowerbound,再就是迭代器之类的 基本用法 begin()--返回指向第一个元素的迭代器 #include<cstdio> #i ...
- JS数组Sort方法的使用
想用sort方法对数组排下序,代码如下: var nums = "12 645 6 85 81 0 9 365 4 752".split(" ").map(fu ...
- IBM Watson启示录:AI不应该仅仅是炫技
IBM Watson启示录:AI不应该仅仅是炫技 https://mp.weixin.qq.com/s/oNp8QS7vQupbi8fr5RyLxA 导 ...
- 开源项目商业分析实例(1) - MonicaHQ
本来写一篇开源商业模式的稿子,因为有四大主题,这个稿子有点大,导致现在半个月过去了,都还没有憋出来. 今天想想还是采用MVP(minimum viable product,最小化可行产品)模式吧. ...
- 关于Xcode9.0版本模拟器Reset重置操作变更
- Kotlin入门(30)多线程交互
Android开发时常会遇到一些耗时的业务场景,比如后台批量处理数据.访问后端服务器接口等等,此时为了保证界面交互的及时响应,必须通过线程单独运行这些耗时任务.简单的线程可使用Thread类来启动,无 ...
- 【原】Java学习笔记011 - 数组
package cn.temptation; import java.util.Scanner; public class Sample01 { public static void main(Str ...
- 目录命令(RD)
RD命令: // 描述: 删除目录或子目录.同 rmdir // 语法: rd [<drive:>]<path> /s /q /? // 参数: /s: (subdirecto ...
- Github上如何查看当前最流行的开源项目
先声明下:只针对初学者,大神的话勿喷. 针对题标的这个问题,按照如下步骤操作即可: 进入Github网站后,显示的页面如下所示: 点击"Explore"链接,进入如下页面: 页面上 ...
- mysql 的链接字符
mysql的链接字符: driver =com.mysql.cj.jdbc.Driverurl =jdbc:mysql://localhost:3306/oa?serverTimezone=Asia/ ...