1、@RequestParam使用于参数上,用于将请求参数映射到指定参数变量上

例如:

 @RequestMapping(value="/hello",method=RequestMethod.GET)

 public String testPara(@RequestParam String str){

 System.out.println(str);

 return "hello";

 }

当我们访问 http://localhost:8080/springMVC/hello?str=xx 的时候,会将xx注入到testParam方法中的str中,你会看到输出xx

当然此时你在浏览器的参数名称必须跟testPara中的参数一样即必须都为str,假如你想使用不同的参数名称,就必须在@RequestParam(" anothername") str 指定

参数名,这样当你访问 http://localhost:8080/springMVC/hello?anothername=xx ,就会将xx注入到str中了。springMVC中默认就是开启 @RequestParam功能的,

你直接访问http://localhost:8080/springMVC/hello?str=xx在程序中不写@RequestParam,还是会注入到str参数中。当然我们最好还是写一下,有助于理解和利于

代码的阅读

2、@PathVariable与@RequestParam类似,但是它是用于rest风格 访问时候获取参数的方式,使用这个注解前提是在@RequestMapping中必须指定模板,不然

访问可能出现400,服务器不懂你要干嘛。例如下面的例子:

 public String testPath(@PathVariable String para)

 @RequestMapping(value="/hello/{para}",method=RequestMethod.GET) //在reqestMapping指定了模板{para}

 public String testPath(@PathVariable String para){  //参数名字一定要跟模板的名字一样,如果不想跟模板一样,可以写成这样@PathVariable("para")String other

 System.out.println(para);

 return "hello";

 }

访问:http://localhost:8080/springMv/spring/hello/anty    控制台输出参数anty

3、 @responsebody表示该方法的返回结果直接写入HTTP response body中
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中响应给客户端。比如异步获取json数据,加上@responsebody后,会直接返回json数据。使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

例如以下代码:

服务器端:

 @RequestMapping(value="/ajaxRequest")

 @ResponseBody

 public String ajax(String str){

 str="sb";

 return str;

 }

客户端代码:

$.ajax({

type:"POST",

async : false,

url:"spring/ajaxRequest",

success:function(data){

alert(data);

}

});

点击页面按钮访问服务器,弹出sb

4、@RequestBody

作用:

i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;

ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

使用时机:

A) GET、POST方式提时, 根据request header Content-Type的值来判断:

·     application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);

·     multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);

·     其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);

B) PUT方式提交时, 根据request header Content-Type的值来判断:

·     application/x-www-form-urlencoded, 必须;

·     multipart/form-data, 不能处理;

·     其他格式, 必须;

说明:request的body部分的数据编码格式由header部分的Content-Type指定;m

requestbody可以直接将客户端发来的ajax请求的json对象注入到服务端的对象中,但是json对象的字段必须跟后台对象的字段对应,

例如 var user{"username":"tom"} 后台的User对象必须要有username 这个字段。既然是使用异步,那么requestBody很多时候是跟responseBody搭配着一起使用!!例如下列代码:

//@RequestMapping(value="/ajaxRequest")

//@ResponseBody

//public String ajax(@RequestBody User user){

//System.out.println(user.getUsername());

//return user.getUsername();

//}

客户端代码:

var m = {

"username":'fuckyou'

};

$.ajax({

type:"POST",

async : false,

url:"spring/ajaxRequest",

dataType:"json",

contentType:"application/json; charset=utf-8",//一定要加这一句发送内容为json

data:JSON.stringify(m),//requestbody接收的是json字符串,所以得将json对象进行转换否则报415错误类型无法识别

success:function(data){

alert("return map success!");

}

});

在客户端发起请求,服务器控制台输出fuckyou,表示username字段注入到user对象

5、@ModelAttribute    一种是放在方法上面,一种是放在参数上面(比较常用的是放在参数前面)

放在方法上面:

     @ModelAttribute
public User User(User userd){
userd.setUsername("fuckg");
return userd; }
@RequestMapping(value="/hello",method=RequestMethod.GET)
public String testPara(User u){
System.out.println(u.getUsername());
return "hello";
}

在到达所有requestMapping之前 会被modelAttribute拦截,在客户端提交表单 会将对应 的属性 注入到Userd 对象中,然后springMVC默认会将usrerd对象 放入视图中,以便访问, 我们可以在hello页面 使用{user.username} 访问,

这里要注意的是 不管参数是写成userd还是写成users,都只能通过user.username访问到,spring是按照该对象类型 的小写来访问,User类对象,所以在页面就通过user访问属性。

第二种是将注解放到参数前:

 @RequestMapping("/modd") //默认使用modelAttribute,如果去掉效果还是一样
public String testModelAttr(@ModelAttribute User userqqq){
System.out.println(userqqq.getUsername());
return "md"; }
 

这里也是表单提交过来的参数 会注入到user 对象的对应属性上(这里表单提交过来的数据,不能使用@RequestBody替换ModelAttribute,requestBody常用在异步提交json数据,在这换成requestBody的话会报415错误),然后spring 也会把该对象放入视图中,在md.jsp页面,就可以通过${user.username}访问,当然这里也是一样

不管参数写成什么样,还是按照该类型的小写字母来访问,所以不是按userqqq来访问,直接按照User-->小写user访问。

尝试了一下去除ModelAttribute的效果,发现还是可用,说明,是spring 默认开启了参数前 的ModelAttribute注解,不过要用的时候还是写出来 利于代码阅读

@requestBody 和@ModelAttribute 都可以用来绑定请求数据到参数上,在我的理解范围内:requestBody主要是将异步请求ajax,json字符串绑定到对象上,requestBody

只接受json字符串,所以记得使用JSON.stringif方法将json对象转成字符串,  而ModelAttribute主要接收来自表单或者url?para参数,将参数绑定到对象上。

转自:https://blog.csdn.net/zz210891470/article/details/59719251

@RequestParam,@PathVariable,@ResponseBody,@RequestBody,@ModelAttribute学习的更多相关文章

  1. @RequestParam,@PathVariable,@RequestBody

    @RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @P ...

  2. springMVC @ModelAttribute学习

    springMVC @ModelAttribute学习 博客分类: Spring   @ModelAttribute 绑定请求参数到命令对象 @ModelAttribute一个具有如下三个作用: ①绑 ...

  3. SpringMVC使用@PathVariable,@RequestBody,@ResponseBody,@RequestParam,@InitBinder

    @Pathvariable public ResponseEntity<String> ordersBack(           @PathVariable String reqKey, ...

  4. SpringMVC @RequestBody @RequestParam @PathVariable 等参数绑定注解详解

    request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用: http://blog.csdn.net/walkerjong/article/details/794 ...

  5. @RequestParam、@PathVariable、 @RequestBody用法

    Get和Post请求 get方式的请求是没有请求体的.但是get有query string parameter .比如url?name=zhangsan post请求发现了两种请求体.一种是FromD ...

  6. @RequestBody和@RequestParam、@ResponseBody的使用

    一:前沿 针对spring mvc的使用,其实我不怎么熟悉的,因为我只是会用几个常用的注解,其他高深的我都不是很清楚的,而且每次用有时候还需要出查资料的,现在自己记载下吧. 二:内容 (1)这里的@R ...

  7. @RequestMapping,@ResponseBody,@RequestBody用法

    本文转载:http://blog.csdn.net/ff906317011/article/details/78552426 1.@RequestMapping 国际惯例先介绍什么是@RequestM ...

  8. @RequestParam @PathVariable

    1.Request参数 在访问各种各样网站时,经常会发现网站的URL的最后一部分形如:?xxxx=yyyy&zzzz=wwww.这就是HTTP协议中的Request参数,它有什么用呢?先来看一 ...

  9. SpringMVC常用注解實例詳解1:@Controller,@RequestMapping,@RequestParam,@PathVariable

    我的開發環境 框架:        springmvc+spring+freemarker 開發工具: springsource-tool-suite-2.9.0 JDK版本: 1.6.0_29 to ...

随机推荐

  1. C与C++接口相互调用

    转载于:http://blog.csdn.net/lincoln_2012/article/details/50801080 项目中经常使用C和C++混合编程,那么,在调用对方接口时,总是不可避免地出 ...

  2. PAT Basic 1076

    1076 Wifi密码 下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请 ...

  3. 【MySQL】MySQL备份和恢复

    一.为什么要备份数据 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分为以下几种. 硬件故障 软件故障 自然灾害 黑客攻击 误操作 (占比最大) 所以, 为了在数据丢失之后能够 ...

  4. Linux的档案权限与目录配置练习题

    1.请说明/bin与/usr/bin目录所防止的执行文件有何不同之处:/bin主要放置在开机时,以及进入单人维护模式后还能够被使用的指令,至于/usr/bin则是大部分软件提供的指令放置处 2.请说明 ...

  5. 转:获取GridView中RowCommand的当前索引行

    获取GridView中RowCommand的当前索引行 前台添加一模版列,里面添加一个LinkButton 前台 (如果在后台代码中用e.CommandArgument取值的话前台代码就必须在按钮中设 ...

  6. 用qemu+gdb tcp server+CDT调试linux内核启动-起步

    用qemu+gdb tcp server+CDT调试linux内核启动-起步 说明: 环境信息与 用virtualbox+模拟串口+CDT调试linux内核 TCP IP协议栈-起步 提到的一样,并且 ...

  7. thinkphp文件上传以及图片处理

    文件上传 上传表单 在ThinkPHP中使用上传功能无需进行特别处理.例如,下面是一个带有附件上传的表单提交: <form action="__URL__/upload" e ...

  8. php 审批流程管理

    1.流程管理的用法是什么样的? 2.怎么发起想要的流程? 3.审批的人要是怎么审批通过? 4.流程审核是不是要挨个走过? 一.要有数据库的内容的 肯定会有表的,首先就是用户表了,然后就是流程表,用户编 ...

  9. div固定在屏幕底部

    项目中需要实现div一直显示在屏幕的底部,不管页面有多长或者多端都需要满足. 在网上找的用js实现的,移动时会闪动,效果不是特别好.也可能是没找到好的. 相比js,我更希望使用css实现 1 < ...

  10. 《分布式对象存储》作者手把手教你写 GO 语言单元测试!

    第一部分:如何写Go语言单元测试 Go语言内建了单元测试(Unit Test)框架.这是为了从语言层面规范写UT的方式. Go语言的命名规则会将以_test.go结尾的go文件视作单元测试代码. 当我 ...