最近遇到了一个采用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. fbx模型动画提取教程附带一个用代码提取的方法

    角色已经人形化(Humanoid)了,那它的动画可以用在其它的模型上了也就是可以共用一套模型动画了但是你有没有发现那动画是和fbx模型绑在一起的,没关系你可以选中这几个动画文件按Contrl+D就可以 ...

  2. centos7 ntp服务器配置

    一.ntp服务是什么 1. 定义 NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议. 2. 发展 首次记载在Internet Enginee ...

  3. golang apns升级到http2

    记录一下golang中升级apns,使用http2替换http1.1的详细过程. apns使用http2的好处就不用再说了,网上一搜一堆信息.苹果的apns推送在2015年8月就支持了http2协议, ...

  4. SQLSERVER CROSS APPLY 与 OUTER APPLY 的应用

    日常开发中遇到多表查询时,首先会想到 INNER JOIN 或 LEFT OUTER JOIN 等等,但是这两种查询有时候不能满足需求.比如,左表一条关联右表多条记录时,我需要控制右表的某一条或多条记 ...

  5. VC++知识点整理

    1.内联函数        定义:定义在类体内的成员函数,即函数的函数体放在类体内        特点:在调用处用内联函数体的代码来替换,用于解决程序的运行效率问题.一定要在调用之前定义,并且内联函数 ...

  6. nvidia 驱动下载地址

    http://www.nvidia.com/Download/index.aspx?lang=en-us

  7. 交互原型画得丑?29个优秀UI/UX线框草图

    现在越来越多UI设计师都需要画一些交互的线框图,然而作为视觉专家,当然要把它画得靓靓的嘛,是不是?所以很多用户会使用<5款高效的原型设计工具>来绘制,或者直接手绘更有逼格. 今天达人手工整 ...

  8. ImageView.src的png图标变形问题

    图标,必须是png-24输出,如果是png-8输出,则失真.

  9. WHY JAVASCRIPT NEEDS TYPES

    Types have a bad reputation for making code harder to read, adding unnecessary ceremony, and in gene ...

  10. thinkphp ajax分页加载更多最简单的实现方法

    <div class="li_list"> <volist name="list" id="vo"> <div ...