最近遇到了一个采用fastJson传输数据的方式,搞了半天,总是感觉模糊,觉得自己有必要在这里做一个系统的总结,今天先从@RequestMapping的属性开始,采用REST 风格的 URL 请求,REST(Representational State Transfer):(资源)表现层状态转化,它是目前最流行的一种软件架构,其结构清晰、易于理解、扩展方便且符合标准。

1、RequestMapping接口的源码如下,里面定义了七个属性

public interface RequestMapping extends Annotation {
      // 指定映射的名称
public abstract String name();
      // 指定请求路径的地址
public abstract String[] value();
      // 指定请求的方式,是一个RequsetMethod数组,可以配置多个方法
public abstract RequestMethod[] method();
      // 指定参数的类型
public abstract String[] params();
     
public abstract String[] headers();
      // 指定数据请求的格式
public abstract String[] consumes();
      // 指定返回的内容类型
public abstract String[] produces();
}

2、下面是我在服务器端编写的一个程序,我将@RequestMapping中的参数都采用了符合原接口的定义的数组的数据类型。

@RequestMapping(value = {"/modifyGet.do","/modifyGet1.do"}, method={RequestMethod.POST, RequestMethod.GET},
          consumes={"application/json"}, produces={"application/json"}, params={"name=mike","pwd=123456"},headers={"a=1"})
@ResponseBody
public Object addEmpGet()throws Exception { JSONObject responseObj = new JSONObject();
responseObj.put("id", 1/*reqObj.getIntValue("id")*/);
return responseObj ;
}  

2.1 测试value属性:映射的是请求的地址,如果是一个数据,那么这两个地址之间的关系是或(||)的关系,请看下面是springmvc启动之后的提示:

2017-08-20 20:04:11,307 INFO [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] -
Mapped "{[/modifyGet.do || /modifyGet1.do],methods=[POST || GET],params=[name=mike && pwd=123456],headers=[a=1],
consumes=[application/json],produces=[application/json],produces=[],custom=[]}" onto public java.lang.Object springMVCmybatis.modifyController.addEmpGet()
throws java.lang.

不仅如此,采用postMan发送请求之后,处理的结果也是一样的。

postMan发送请求的地址:

http://localhost:8080/springMVCmybatis/modifyGet1.do?name=mike&pwd=123456
http://localhost:8080/springMVCmybatis/modifyGet.do?name=mike&pwd=123456

postMan接收到的结果:

{"id":1}

2.2、method属性:定义了请求的方式,如果此属性定义了多个值,那么可以适应多种请求方式,比如此例中我定义了RequestMethod.POST与RequestMethod.GET两种方法,采用postMan发送两种请求也可以得到正确的JSON数据。正确的请求方式如下:

问题:如果将服务器端代码改成如下格式,那么发送的请求是GET就会报错了,POST请求就不会报错,代码如下

@RequestMapping(value = {"/modifyGet.do","/modifyGet1.do"}, method={RequestMethod.POST, RequestMethod.GET},
                      consumes={"application/json"}, params={"name=mike","pwd=123456"},headers="a=1")
@ResponseBody
public Object addEmpGet(@RequestBody JSONObject reqobj)throws Exception { JSONObject responseObj = new JSONObject();
responseObj.put("id", reqObj.getIntValue("id"));
return responseObj ;
}  

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

  produces属性:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回,本人实验了一下,如果请求的头中不包含这个属性也能有正确的返回值,但是如果有Accept这个属性,那么前后要匹配,否则输出报错;

2.4、params与heads:这两个属性的作用是类似的,可以对请求进一步过滤,如果输入的参数不包含对应的属性或者属性的值有错误,那么就会报HTTP Status [404] – [Not Found]的错误。

参考博客:

1、https://my.oschina.net/kolbe/blog/509810

2、http://blog.csdn.net/walkerjong/article/details/7994326

springMVC请求注解@RequestMapping各个属性值的更多相关文章

  1. SpringMVC使用注解@RequestMapping映射请求

    pringMVC通过使用@RequestMapping注解,实现指定控制器可以处理哪些URL请求. 控制器的类定义及方法定义处都可以标注@RequestMapping: 类定义处:提供初步的请求映射信 ...

  2. 【SpringMVC】SpringMVC系列5之@RequestHeader 映射请求头属性值

    5.@RequestHeader 映射请求头属性值 5.1.概述 请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中 ...

  3. SpringMVC请求参数注解两个小问题

    今天遇到使用SpringMVC请求注解遇到的两个小问题: 如果用@requestBody注解,则请求体内容类型一般要为application/json,如果其类型为multipart/form-dat ...

  4. springBoot注解大全JPA注解springMVC相关注解全局异常处理

    https://www.cnblogs.com/tanwei81/p/6814022.html 一.注解(annotations)列表 @SpringBootApplication:包含了@Compo ...

  5. springmvc(3)注解

    有疑问可以参考博主其他关于spring mvc的博文 此时直接进行代码的实现 一般的步骤: -加入jar包 -配置DispatcherServlet -加入Spring MVC配置文件 -编写请求的处 ...

  6. SpringMVC @ModelAttribute注解

    /**     * 1. 有 @ModelAttribute 标记的方法, 会在每个目标方法执行之前被 SpringMVC 调用!      * 2. @ModelAttribute 注解也可以来修饰 ...

  7. 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)

    注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 SpringBoot是如何实现自动配置的?--SpringBoot源码(四) 温故而知新,我们来简单回顾一下上 ...

  8. SpringMVC(六):@RequestMapping下使用@RequestHeader绑定请求报头的属性值、@CookieValue绑定请求中的Cookie值

    备注:我本地浏览器的报头(Request Header)信息如下: Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image ...

  9. 前台jquery+ajax+json传值,后台处理完后返回json字符串,如何取里面的属性值?(不用springmvc注解)

    一.取属性值 前台页面: function select(id){ alert("hfdfhdfh"+id); $.ajax({ url:"selectByid.jsp& ...

随机推荐

  1. springmvc web.xml配置之 -- SpringMVC IOC容器初始化

    SpringMVC IOC容器初始化 首先强调一下SpringMVC IOC容器初始化有些特别,在SpringMVC中除了生成一个全局的spring Ioc容器外,还会为DispatcherServl ...

  2. js小例子之二级联动

    联动原理 当用户点击省级的下拉选项,选择所在省,下一个下拉选项里的选项,则变成用户选择省下的所有市的信息,不会出现其它省市的信息. 省市数据 把省市数据,保存在js文件中,以json形式保存,以便读取 ...

  3. CSS使文字、大小不固定的图片垂直居中

    一:单行文字垂直居中 使用line-height为父元素高度即可. 二:多行文字垂直居中 使用display:table-cell属性. 将父元素设置为display:table-cell,同时ver ...

  4. Sensitivity, specificity, and reproducibility of RNA-Seq differential expression calls RNA-Seq差异表达调用的灵敏度 特异性 重复性

    Sensitivity, specificity, and reproducibility of RNA-Seq differential expression calls RNA-Seq差异表达调用 ...

  5. post传参

    1.form表单 2.数据流

  6. yum 系列(二) 离线部署

    yum 系列(二) 离线部署 一.下载 rpm 依赖包 (1) yum 下载 rpm 包 准备一台 全新的 CentOS7 mini 虚拟机 ,联网下载所有所需的 rpm 包和其依赖, yum ins ...

  7. Web图片编辑控件升级日志-Xproer.ImageEditor

    版权所有 2009-2014 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com 产品首页:http://www.ncmem.com/webplug/image-e ...

  8. Codeforces761B Dasha and friends 2017-02-05 23:34 162人阅读 评论(0) 收藏

    B. Dasha and friends time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  9. 动态规划 HDU1231-------最大连续子序列

    Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i < ...

  10. Lucene 分页搜索实现

    Lucene中有两种分页查询方式 1.一次查询出大量数据,然后根据页码定位是哪个文档,其实就是暴力获取了 2.通过调用searchAfter来实现 我们都知道collect是lucene中对搜索到的文 ...