springMvc註解之@ResponseBody和@RequestBody

來源:互聯網
上載者:User

標籤:重複   oid   spring   ack   直接   string   mapping   res   傳輸   

簡介

springmvc對json的前後台傳輸做了很好封裝,避免了重複編碼的過程,下面來看看常用的@ResponseBody和@RequestBody註解

添加依賴

springmvc對json的處理依賴jackson

<dependency>    <groupId>org.codehaus.jackson</groupId>    <artifactId>jackson-core-asl</artifactId>    <version>1.9.11</version></dependency><dependency>    <groupId>org.codehaus.jackson</groupId>    <artifactId>jackson-mapper-asl</artifactId>    <version>1.9.11</version></dependency>
xml配置
<mvc:annotation-driven />//不要忘了命名空間配置
@ResponseBody

如果傳輸的是單層json對象,我們後台可以直接用 @RequestParam接收

$.ajax({    type : "post",    dataType : "json",    url : "/testRequestBody",    data:{        name:"韋德",        age:35    },    success : function(result) {    }});
@RequestMapping("/testRequestBody")public String testRequestBody(@RequestParam Map<String, Object> map) {  System.out.println(map);// {name=韋德, age=35}  return "index";}

如果傳輸的是多層嵌套json對象,這個時候會就會出現資料丟失問題

@ResponseBody很好的解決了這個問題,它會把前台傳輸過來的json轉化為後台對應的對象

$.ajax({    type : "post",    dataType : "json",    url : "/testRequestBody",    contentType:"application/json",       data:JSON.stringify({        name:"韋德",        win:[2006,2012,2013],        age:35    }),    success : function(result) {    }});
@RequestMapping("/testRequestBody")public String testRequestBody(@RequestBody Map<String, Object> map) {  System.out.println(map);//{name=韋德, win=[2006, 2012, 2013], age=35}  return "index";}

需要注意的是前台需要指定contentType為"application/json"

同時要把json對象轉化為String,否則後台不能識別

@ResponseBody

ajax請求返回json格式,往常我們可以這樣做

private void writeJson(HttpServletResponse response, Object object) {  String json = JSON.toJSONString(object);  response.setCharacterEncoding("UTF-8");  response.setContentType("application/json; charset=utf-8");  PrintWriter out = null;  try {    out = response.getWriter();    out.write(json);  } catch (IOException e) {    e.printStackTrace();  } finally {    if (out != null) {      out.close();    }  }}

這個時候 @ResponseBody就派上用場了,只需要一個註解,全部搞定

$.ajax({    type : "post",    dataType : "json",    url : "/testResponseBody",    success : function(result) {        console.info(result);    }});
@RequestMapping("/testResponseBody")@ResponseBodypublic Map<String, Object> testRequestBody() {  Map<String, Object> result = new HashMap<String, Object>();  result.put("name", "韋德");  result.put("age", 35);  return result;}

前台console輸出

{    "age": 35,    "name": "韋德"}
總結

在網上看到很不錯的流程圖,作為總結吧

springMvc註解之@ResponseBody和@RequestBody

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.