基于SpringMVC(@RequestMapping的参数和用法)

这篇文章主要介绍了SpringMVC @RequestMapping的参数和用法解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

基于SpringMVC,@RequestMapping的参数和用法,久久派带你了解更多相关信息。

@RequestMapping的参数和用法

RequestMapping里面的注解包含的参数如图:

基于SpringMVC(@RequestMapping的参数和用法)

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

@RequestMapping 除了修饰方法, 还可来修饰类 :

类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录;

方法处:提供进一步的细分映射信息。 相对于类定义处的 URL。

若类定义处未标注 @RequestMapping,则方法处标记的 URL相对于 WEB 应用的根目录

返回ModelAndView时的url会根据你的 @RequestMapping实际情况组成。

如果类上没有映射,那么url直接就是方法的映射;否则url为类上+方法上映射路径组合。

对应项目jsp位置则是一级路径对应一级文件目录。

如url为/default/index对应项目中webapp/default/index.jsp

RequestMapping注解有六个属性,下面我们把她分成三类进行说明

【1】value, method

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

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

【2】consumes,produces

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

【3】params,headers

params: 指定request中必须包含某些参数值时,才让该方法处理。

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

测试示例如下:

【1】value||path

  • JSP 页面

<a href=\"springmvc/testRequestMapping\" rel=\"external nofollow\" >Test RequestMapping</a>

  • controller

    @RequestMapping(value=\"/testRequestMapping\" )    public String testRequestMapping() {        System.out.println(\"testRequestMapping\");        return SUCCESS;    }

成功返回success.jsp 。

Tips :若 href 属性值,不等于value值,则将提示404错误。

value的uri值为以下三类:

A) 可以指定为普通的具体值;

如下:

@RequestMapping(\"/testRequestMapping\")

B) 可以指定为含有某变量的一类值(URI Template Patterns with Path Variables)–restful风格;

    @RequestMapping(\"/testPathVariable/{id}\")    public String testPathVariable(@PathVariable Integer id2) {        System.out.println(\"testPathVariable: \" + id2);        return SUCCESS;    }

除了value还有path,二者效果等同,可以参考源码如下图:

基于SpringMVC(@RequestMapping的参数和用法)

其中关于@PathVariable 有如下说明:

① 如果路径中的变量与方法中的变量名一致,可直接使用@PathVariable;

② 如果二者不一致,则使用@PathVariable(Variable)显示指定要绑定的路径中的变量 。

@PathVariable只能绑定路径中的占位符参数,且路径中必须有参数。

@PathVariable用法参考路径参数绑定参考

    @RequestMapping(\"/testPathVariable/{id}\")    public String testPathVariable(@PathVariable(\"id\") Integer id2) {        System.out.println(\"testPathVariable: \" + id2);        return SUCCESS;    }    //路径中的 id 与 方法中的 id2 绑定

C) 可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);

  @RequestMapping(\"/spring-web/{symbolicName:[a-z-]+}-{version:\\d\\.\\d\\.\\d}.{extension:\\.[a-z]}\")    public void handle(@PathVariable String version, @PathVariable String extension) {          // ...    }  }  

【2】method

  • JSP 页面

<a href=\"springmvc/testMethod\" rel=\"external nofollow\" >Test Method</a>//href 默认为get 请求。

  • controller–限制接收post 请求。

    @RequestMapping(value = \"/testMethod\", method = RequestMethod.POST)    public String testMethod() {        System.out.println(\"testMethod\");        return SUCCESS;    }

  • result as follows :

HTTP Status 405 – Request method ‘GET\’ not supported 。

基于SpringMVC(@RequestMapping的参数和用法)

【状态码405表示:请求中指定的方法不被允许。】

将method 改为method = RequestMethod.GET正常跳转页面。

【3】consumes

  • JSP 页面

仍以testMethod为例,提交表单。

默认contentType为Content-Type:application/x-www-form-urlencoded。

<form action=\"springmvc/testMethod\" method=\"POST\"><input type=\"text\" name=\"username\" value=\"\"/><input type=\"submit\" value=\"submit\"/></form>

基于SpringMVC(@RequestMapping的参数和用法)

  • controller–限制接收post 请求以及consumes=\”application/json\”。

    @RequestMapping(value = \"/testMethod\", method = RequestMethod.POST,consumes=\"application/json\")    public String testMethod() {        System.out.println(\"testMethod\");        return SUCCESS;    }

  • result as follows :

基于SpringMVC(@RequestMapping的参数和用法)

【状态码415表示:由于媒介类型不被支持,服务器不会接受请求。。】

去掉 consumes属性,页面正常跳转 !

【4】produces

后台代码如下:

    @RequestMapping(value = \"/testMethod\", method = RequestMethod.POST,produces=\"application/json\")    public void testMethod2(HttpServletRequest request,HttpServletResponse response,Model model)     throws IOException {        request.getHeader(\"Accept\");        System.out.println(request.getHeader(\"Accept\"));//      response.setContentType(\"application/json\");        String username = request.getParameter(\"username\");        System.out.println(\"testMethod...\"+username);        model.addAttribute(\"user\", username);        Object jsonString =  \"{\'name\': \'helloworlda\'}\";        JSONObject jsonobj=JSONObject.fromObject(jsonString);        PrintWriter out = response.getWriter();        out.print(jsonobj);    }

  • 浏览器请求头

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

其中最后一项 : */*;q=0.8。

该项表明可以接收任何类型的,权重系数0.8表明如果前面几种类型不能正常接收。则使用该项进行自动分析。

application/json 几种主流浏览器都可以自动解析。

【5】params

  • JSP页面

form action=\"springmvc/testParamsAndHeaders\" method=\"POST\"><input type=\"text\" name=\"username\" value=\"\"/><input type=\"text\" name=\"age\" value=\"\"/><input type=\"submit\" value=\"submit\"/></form>

参数 username=tom;age = 10;

  • 后台代码:

设定必须包含username 和age两个参数,且age参数不为10 (可以有多个参数)。

@RequestMapping(value = \"testParamsAndHeaders\", params = { \"username\",\"age!=10\" })    public String testParamsAndHeaders() {        System.out.println(\"testParamsAndHeaders\");        return SUCCESS;    }

  • result as follows :

基于SpringMVC(@RequestMapping的参数和用法)

【状态码400表示:服务器未能理解请求。 】

  • 将age 改为其他值,正常跳转。

基于SpringMVC(@RequestMapping的参数和用法)

【6】headers

  • 浏览器请求头如下:

基于SpringMVC(@RequestMapping的参数和用法)

  • 后台测试代码如下:

@RequestMapping(value = \"testParamsAndHeaders\", params = { \"username\",\"age!=10\" }, headers = { \"Accept-Language=US,zh;q=0.8\" })    public String testParamsAndHeaders() {        System.out.println(\"testParamsAndHeaders\");        return SUCCESS;    }

设定请求头中第一语言必须为US。

  • result as follows :

基于SpringMVC(@RequestMapping的参数和用法)

【状态码404表示:服务器无法找到被请求的页面。】

将后台代码改为zh-CN。。。

基于SpringMVC(@RequestMapping的参数和用法)

页面正常跳转。

【Tips】:

① 服务器首先根据URL去找页面,如果找不到就返回404;

② 如果找到,但是不能正常处理,就会返回 5XX 类型错误。

其中在第一步过程中,会根据请求头进行一系列判断 !

以上为个人经验,希望能给大家一个参考,也希望大家多多支持趣讯吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/11869.html

(0)
nan
上一篇 2021-08-11
下一篇 2021-08-11

相关推荐

  • 淘宝账号等级最高是什么(淘宝账号如何获得高等级)

    淘宝账号等级最高是什么?淘宝账号如何获得高等级,久久派带你了解相关信息。卖家好评的交易超过10000笔,被称为皇冠卖家。卖家的店铺被称为皇冠店铺。卖家好评的交易超过500001笔,卖家的店铺被称为金冠店铺。淘宝账号是有等级之分,很多人不知道等级最高指的是什么,那么淘宝这个等级是如何积累呢?估计很多人不知道如何做到,也不知道如何获得高等级,有需要的朋友就来看看这篇文章吧!淘宝账号等级最

    2021-11-25
    0
  • 自然人独资公司章程模板(个人独资企业公司章程)

    个人独资企业章程应包括公司名称、住所地、公司的宗旨、注册资本、财产责任等。【法律依据】《中华人民共和国个人独资企业法》第八条设立个人独资企业应当具备下列条件:(一)投资人为一个自然人;(二)有合法的企业名称;(三)有投资人申报的出

    2021-12-16
    0
  • 加微信赚钱一天500(亲身经历告诉你真相)

    现今微信已经成了人们生活的一部分通过微信沟通、支付相当便捷然而这也给不法分子提供了可乘之机6月29日樊城定中门派出所联合刑侦大队经过摸排调查捣毁了一个冒充客服打电话招聘兼职的电信诈骗“引流”窝点抓获电信诈骗嫌疑人6名收缴用于拨打诈骗电话的手机8部、手

    2021-10-18 用户投稿
    0
  • 星巴克换吸管了!微博CEO王高飞:垃圾吸管总算是换掉了

    今天下午,微博CEO王高飞(微博ID:@来去之间)发文表示,星巴克终于换掉垃圾纸吸管了,新吸管是由咖啡渣做的。据悉,出于环保,星巴克采用咖啡渣做的吸管。星巴克介绍,可生物降解的&ldquo;渣

    2021-09-21
    0
  • 钢铁是怎样炼成的作者是(保尔经历的8个主要事件)

    钢铁是怎样炼成的作者是?保尔经历的8个主要事件,爱惜日带你了解相关信息。苏联作家尼·奥·奥斯特洛夫斯基(1904年1936年)生于乌克兰一个贫穷的工人家庭,从小靠自己劳动维持生活。他只念过三年书,但十分好学,阅读了许多进步的文学作品。十月革命后,积极投入到保卫苏维埃政权的斗争,1919年加入共青团,接着参加红军奔赴前线。1920年在战斗中负重伤,转业到工厂担任共青团工作。第二年秋天,响应

    2021-08-14 用户投稿
    0
  • JYP将推新女团年龄最小15岁(韩国最小女子组合)

    相信对于关注韩娱的朋友们来说,应该有不少可以称得上自己“本命”的男团女团。韩国的各大娱乐经纪公司也在源源不断地输送新鲜血液,各个组合让人眼花缭乱。近日韩国三大娱乐巨头之一的JYP公开了三位新女团成员的舞蹈视频,看来六代团马上就要崛起了。JY

    2021-12-07 用户投稿
    0

发表回复

登录后才能评论