二、SpringMVC常用注解@RequestMapping

@Controller

标注在类上,作用同@service等。将一个类声明为处理器。

@RequestMapping

请求URL到处理器功能处理方法的映射
此注解可以放在类上也可以放在方法上

value根据请求地址限定

value: 指定请求的实际地址,指定的地址可以是URI Template 模式,可以为数组

普通URL路径映射

用法如下

@Controller
@RequestMapping(value = "/hello")
public class UserManageController {


    @RequestMapping(value = "/word")
    public String hello() {
        return "hello";
    }


    @RequestMapping(value = {"/word1","/word2"})
    public String hellos() {
        return "hello";
    }
}

URI模板模式映射

  1. @RequestMapping(value=”/users/{userId}”):{×××}占位符, 请求的URL可以是 “/users/123456”或“/users/abcd”,通过6通过@PathVariable可以提取URI模板模式中的{×××}中的×××变量。

  2. @RequestMapping(value=”/users/{userId}/create”):这样也是可以的,请求的URL可以是“/users/123/create”。

  3. @RequestMapping(value=”/users/{userId}/topics/{topicId}”):这样也是可以的,请求的URL可以是“/users/123/topics/123”。

Ant风格的URL路径映射

  1. @RequestMapping(value=”/users/**”):可以配“/users/abc/abc”,但“/users/123”将会被【URI模板模式映射中的“/users/{userId}”模式优先映射到】【最长匹配优先】。

  2. @RequestMapping(value=”/product?”):可匹配“/product1”或“/producta”,但不匹配“/product”或“/productaa”;

  3. @RequestMapping(value=”/product*”):可匹配“/productabc”或“/product”,但不匹配“/productabc/abc”;
  4. @RequestMapping(value=”/product/*”):可匹配“/product/abc”,但不匹配“/productabc”;
  5. @RequestMapping(value=”/products/**/{productId}”):可匹配“/products/abc/abc/123”或“/products/123”,也就是Ant风格和URI模板变量风格可混用;

正则表达式风格的URL路径映射

从Spring3.0开始支持正则表达式风格的URL路径映射,格式为{变量名:正则表达式},这样我们就可以通过6.6.5讲的通过@PathVariable提取模式中的{×××:正则表达式匹配的值}中的×××变量了。

@RequestMapping(value=”/products/{categoryCode:\d+}-{pageNumber:\d+}”):可以匹配“/products/123-1”,但不能匹配“/products/abc-1”,这样可以设计更加严格的规则。

正则表达式风格的URL路径映射是一种特殊的URI模板模式映射:
URI模板模式映射是{userId},不能指定模板变量的数据类型,如是数字还是字符串;
正则表达式风格的URL路径映射,可以指定模板变量的数据类型,可以将规则写的相当复杂。

组合使用是“或”的关系

如 @RequestMapping(value={“/test1”, “/user/create”}) 组合使用是或的关系,即“/test1”或“/user/create”请求URL路径都可以映射到@RequestMapping指定的功能处理方法。


method: 根据请求方法限定

普通的方法限定

指定请求的method类型, GET、POST、PUT、DELETE等;
“`

@RequestMapping(value = "/word",method = RequestMethod.POST)
public String helloMethod() {
    return "hello";
}

“`

组合使用是“或”的关系

@RequestMapping(value="/methodOr", method = {RequestMethod.POST, RequestMethod.GET}):即请求方法可以是 GET 或 POST。

提示:
1、一般浏览器只支持GET、POST请求方法,如想浏览器支持PUT、DELETE等请求方法只能模拟。
2、除了GET、POST,还有HEAD、OPTIONS、PUT、DELETE、TRACE。
3、DispatcherServlet默认开启对 GET、POST、PUT、DELETE、HEAD的支持;
4、如果需要支持OPTIONS、TRACE,请添加DispatcherServlet在web.xml的初始化参数:dispatchOptionsRequest 和 dispatchTraceRequest 为true。

请求参数数据映射限定

params: 指定request中必须包含某些参数值是,才让该方法处理。为请求参数的数组 支持一些简单的表达式 。如 params={“!id”,”name!=James”} 表示不能带名称为id的参数 而且name的值不能为James 等等表达式 。

请求数据中有指定参数名

  1. @RequestMapping(params=”create”, method=RequestMethod.GET) :表示请求中有“create”的参数名且请求方法为“GET”即可匹配,
  2. 2.

请求数据中没有指定参数名

  1. @RequestMapping(params=”!create”, method=RequestMethod.GET):表示请求中没有“create”参数名且请求方法为“GET”即可匹配

请求数据中指定参数名=值

@RequestMapping(params=”submitFlag=create”, method=RequestMethod.GET):表示请求中有“submitFlag=create”请求参数且请求方法为“GET”即可匹配

请求数据中指定参数名!=值

@RequestMapping(params=”submitFlag!=create”, method=RequestMethod.GET):表示请求中的参数“submitFlag!=create”且请求方法为“GET”即可匹配

组合使用是“且”的关系

@RequestMapping(params={“test1”, “test2=create”}):表示请求中的有“test1”参数名 且 有“test2=create”参数即可匹配

请求头数据映射限定

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

请求头数据中有指定参数名

@RequestMapping(value=”/header/test1”, headers = “Accept”):表示请求的URL必须为“/header/test1”
且 请求头中必须有Accept参数才能匹配。

@RequestMapping(value=”/header/test1”, headers = “abc”):表示请求的URL必须为“/header/test1”
且 请求头中必须有abc参数才能匹配,

请求头数据中没有指定参数名

@RequestMapping(value=”/header/test2”, headers = “!abc”):表示请求的URL必须为“/header/test2”
且 请求头中必须没有abc参数才能匹配。

请求头数据中指定参数名=值

@RequestMapping(value=”/header/test3”, headers = “Content-Type=application/json”):表示请求的URL必须为“/header/test3” 且 请求头中必须有“Content-Type=application/json”参数即可匹配。

当你请求的URL为“/header/test3” 但 如果请求头中没有或不是“Content-Type=application/json”参数(如“text/html”其他参数),将返回“HTTP Status 415”状态码【表示不支持的媒体类型(Media Type),也就是MIME类型】,即我们的功能处理方法只能处理application/json的媒体类型。

@RequestMapping(value=”/header/test4”, headers = “Accept=application/json”):表示请求的URL必须为“/header/test4” 且 请求头中必须有“Accept =application/json”参数即可匹配。

当你请求的URL为“/header/test4” 但 如果请求头中没有“Accept=application/json”参数(如“text/html”其他参数),将返回“HTTP Status 406”状态码【不可接受,服务器无法根据Accept头的媒体类型为客户端生成响应】,即客户只接受“application/json”媒体类型的数据,即我们的功能处理方法的响应只能返回“application/json”媒体类型的数据。

Accept=text/*:表示主类型为text,子类型任意,如“text/plain”、“text/html”等都可以匹配。

Accept=/:表示主类型任意,子类型任意,如“text/plain”、“application/xml”等都可以匹配

请求头数据中指定参数名!=值

@RequestMapping(value=”/header/test7”, headers = “Accept!=text/vnd.wap.wml”):表示请求的URL必须为“/header/test7” 且 请求头中必须有“Accept”参数但值不等于“text/vnd.wap.wml”即可匹配。

组合使用是“且”的关系

@RequestMapping(value=”/header/test8”, headers = {“Accept!=text/vnd.wap.wml”,”abc=123”}):表示请求的URL必须为“/header/test8” 且 请求头中必须有“Accept”参数但值不等于“text/vnd.wap.wml”且 请求中必须有参数“abc=123”即可匹配。

注:Accept:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
如果您的请求中含有Accept:“/”,则可以匹配功能处理方法上的如“text/html”、“text/*”,“application/xml”等。


生产者、消费者限定

基本概念

Media Type:

互联网媒体类型,一般就是我们所说的MIME类型,用来确定请求的内容类型或响应的内容类型。

媒体类型格式:type/subtype(;parameter)?
type主类型,任意的字符串,如text,如果是*号代表所有;
subtype 子类型,任意的字符串,如html,如果是*号代表所有;
parameter 可选,一些参数,如Accept请求头的q参数, Content-Type的 charset参数。详见http://tools.ietf.org/html/rfc2616#section-3.7

常见媒体类型:

text/html : HTML格式 text/plain :纯文本格式 text/xml :XML格式
image/gif :gif图片格式 image/jpeg :jpg图片格式 image/png:png图片格式

application/x-www-form-urlencoded : 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)。
multipart/form-data : 当你需要在表单中进行文件上传时,就需要使用该格式;

application/xhtml+xml :XHTML格式 application/xml : XML数据格式
application/atom+xml :Atom XML聚合格式 application/json : JSON数据格式
application/pdf :pdf格式 application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)。

在如tomcat服务器的 “conf/web.xml”中指定了扩展名到媒体类型的映射,在此我们可以看到服务器支持的媒体类型。

功能处理方法是消费者

请求头的内容类型Content-Type:内容类型,即请求/响应的内容区数据的媒体类型,表示发送到服务器的内容数据的媒体类型.
即只消费Content-Type指定的请求内容体数据;
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

@RequestMapping(value = "/consumes", consumes = {"application/json"}):此处使用consumes来指定功能处理方法能消费的媒体类型,其通过请求头的“Content-Type”来判断

只对请求头为“Content-Type:application/x-www-form-urlencoded”的请求进行处理(即消费请求内容区数据);

功能处理方法是生产者

响应头的内容类型表示发送到客户端的内容数据类型,和请求头的内容类型类似,只是方向相反.
Accept:用来指定什么媒体类型的响应是可接受的,即告诉服务器我需要什么媒体类型的数据,此时服务器应该根据Accept请求头生产指定媒体类型的数据。
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

@RequestMapping(value = "/produces", produces = "application/json"):表示将功能处理方法将生产json格式的数据,此时根据请求头中的Accept进行匹配,如请求头“Accept:application/json”时即可匹配;

@RequestMapping(value = "/produces", produces = "application/xml"):表示将功能处理方法将生产xml格式的数据,此时根据请求头中的Accept进行匹配,如请求头“Accept:application/xml”时即可匹配。

此种方式相对使用@RequestMapping的“headers = “Accept=application/json””更能表明你的目的。

组合使用是“或”的关系

@RequestMapping(produces={“text/html”, “application/json”}) :将匹配“Accept:text/html”或“Accept:application/json”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值