@RequestMapping,@ResponseBody,@RequestBody用法
本文轉(zhuǎn)載:http://blog.csdn.net/ff906317011/article/details/78552426
1.@RequestMapping
國(guó)際慣例先介紹什么是@RequestMapping,@RequestMapping 是一個(gè)用來(lái)處理請(qǐng)求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應(yīng)請(qǐng)求的方法都是以該地址作為父路徑;用于方法上,表示在類的父路徑下 追加方法上注解中的地址將會(huì)訪問(wèn)到該方法,此處需注意@RequestMapping用在類上可以沒(méi)用,但是用在方法上必須有。
例如:
@Controller //設(shè)置想要跳轉(zhuǎn)的父路徑 @RequestMapping(value = "/Controllers") public class StatisticUserCtrl { //如需注入,則寫入需要注入的類 //@Autowired // 設(shè)置方法下的子路經(jīng) @RequestMapping(value = "/method") public String helloworld() { return "helloWorld"; } }其原理也非常好了解,其對(duì)應(yīng)的 action 就是“ (父路徑) controller/(父路徑下方法路經(jīng))method ”。因此,在本地服務(wù)器上訪問(wèn)方法 http://localhost:8080/controller/method 就會(huì)返回(跳轉(zhuǎn))到“ helloWorld.jsp ”頁(yè)面。
說(shuō)到這了,順便說(shuō)一下 @PathVariable 注解,其用來(lái)獲取請(qǐng)求路徑(url )中的動(dòng)態(tài)參數(shù)。
頁(yè)面發(fā)出請(qǐng)求:
function login() {var url = "${pageContext.request.contextPath}/person/login/"; var query = $('#id').val() + '/' + $('#name').val() + '/' + $('#status').val(); url += query; $.get(url, function(data) { alert("id: " + data.id + "name: " + data.name + "status: " + data.status); }); }?
例如:
/** * @RequestMapping(value = "user/login/{id}/{name}/{status}") 中的 {id}/{name}/{status} * 與 @PathVariable int id、@PathVariable String name、@PathVariable boolean status * 一一對(duì)應(yīng),按名匹配。 */@RequestMapping(value = "user/login/{id}/{name}/{status}") @ResponseBody //@PathVariable注解下的數(shù)據(jù)類型均可用 public User login(@PathVariable int id, @PathVariable String name, @PathVariable boolean status) { //返回一個(gè)User對(duì)象響應(yīng)ajax的請(qǐng)求 return new User(id, name, status); }?
2、@ResponseBody
@Responsebody 注解表示該方法的返回的結(jié)果直接寫入 HTTP 響應(yīng)正文(ResponseBody)中,一般在異步獲取數(shù)據(jù)時(shí)使用,通常是在使用 @RequestMapping 后,返回值通常解析為跳轉(zhuǎn)路徑,加上 @Responsebody 后返回結(jié)果不會(huì)被解析為跳轉(zhuǎn)路徑,而是直接寫入HTTP 響應(yīng)正文中。
作用:
該注解用于將Controller的方法返回的對(duì)象,通過(guò)適當(dāng)?shù)腍ttpMessageConverter轉(zhuǎn)換為指定格式后,寫入到Response對(duì)象的body數(shù)據(jù)區(qū)。
使用時(shí)機(jī):
返回的數(shù)據(jù)不是html標(biāo)簽的頁(yè)面,而是其他某種格式的數(shù)據(jù)時(shí)(如json、xml等)使用;
當(dāng)頁(yè)面發(fā)出異步請(qǐng)求:
function login() {var datas = '{"username":"' + $('#username').val() + '","userid":"' + $('#userid').val() + '","status":"' + $('#status').val() + '"}'; $.ajax({ type : 'POST', contentType : 'application/json', url : "${pageContext.request.contextPath}/user/login", processData : false, dataType : 'json', data : datas, success : function(data) { alert("userid: " + data.userid + "username: " + data.username + "status: "+ data.status); }, error : function(XMLHttpRequest, textStatus, errorThrown) { alert("出現(xiàn)異常,異常信息:"+textStatus,"error"); } }); };例如:
@RequestMapping(value = "user/login") @ResponseBody // 將ajax(datas)發(fā)出的請(qǐng)求寫入 User 對(duì)象中,返回json對(duì)象響應(yīng)回去 public User login(User user) { User user = new User(); user .setUserid(1); user .setUsername("MrF"); user .setStatus("1"); return user ; }?
異步獲取 json 數(shù)據(jù),加上 @Responsebody 注解后,就會(huì)直接返回 json 數(shù)據(jù)。
?
3、@RequestBody
@RequestBody 注解則是將 HTTP 請(qǐng)求正文插入方法中,使用適合的 HttpMessageConverter 將請(qǐng)求體寫入某個(gè)對(duì)象。
作用:
1) 該注解用于讀取Request請(qǐng)求的body部分?jǐn)?shù)據(jù),使用系統(tǒng)默認(rèn)配置的HttpMessageConverter進(jìn)行解析,然后把相應(yīng)的數(shù)據(jù)綁定到要返回的對(duì)象上;
2) 再把HttpMessageConverter返回的對(duì)象數(shù)據(jù)綁定到 controller中方法的參數(shù)上。
使用時(shí)機(jī):
A) GET、POST方式提時(shí), 根據(jù)request header Content-Type的值來(lái)判斷:
application/x-www-form-urlencoded, 可選(即非必須,因?yàn)檫@種情況的數(shù)據(jù)@RequestParam, @ModelAttribute也可以處理,當(dāng)然@RequestBody也能處理);
multipart/form-data, 不能處理(即使用@RequestBody不能處理這種格式的數(shù)據(jù));
其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的數(shù)據(jù),必須使用@RequestBody來(lái)處理);
B) PUT方式提交時(shí), 根據(jù)request header Content-Type的值來(lái)判斷:
application/x-www-form-urlencoded, 必須;multipart/form-data, 不能處理;其他格式, 必須;
說(shuō)明:request的body部分的數(shù)據(jù)編碼格式由header部分的Content-Type指定;
例如:
@RequestMapping(value = "user/login") @ResponseBody // 將ajax(datas)發(fā)出的請(qǐng)求寫入 User 對(duì)象中 public User login(@RequestBody User user) { // 這樣就不會(huì)再被解析為跳轉(zhuǎn)路徑,而是直接將user對(duì)象寫入 HTTP 響應(yīng)正文中 return user; }轉(zhuǎn)載于:https://www.cnblogs.com/zhanglijun/p/8403849.html
總結(jié)
以上是生活随笔為你收集整理的@RequestMapping,@ResponseBody,@RequestBody用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解释BOM头和去掉方法
- 下一篇: 2017年值得回首的那些事(文末有新春好