springMVC请求注解@RequestMapping各个属性值

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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中的参数都采用了符合原接口的定义的数组的数据类型。

1

2

3

4

5

6

7

8

9

@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启动之后的提示:

1

2

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接收到的结果:

1

{"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

转载于:https://my.oschina.net/xiaominmin/blog/1604075

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值