-------------------siwuxie095
@ResponseBody 使用須知
使用 @ResponseBody 注解映射響應體
@ResponseBody 注解可被應用於方法上,標志該方法的返回值
應該被直接寫回到 HTTP 響應體中去(而不會被被放置到 Model
中 或 被解釋為一個視圖名)
在實際開發中,返回 JSON 是最常見的一種方式,而 SpringMVC
提供了一種更為簡便的方式輸出 JSON(非 JSP 頁面),那就是使
用 @ResponseBody 注解
在輸出 JSON 時,需要 Jackson 的 jar 包支持,2.x 版本需要導入
如下三個 jar 包:
(1)jackson-core
https://github.com/FasterXML/jackson-core/wiki
http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/
(2)jackson-annotations
https://github.com/FasterXML/jackson-annotations/wiki
http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/
(3)jackson-databind
https://github.com/FasterXML/jackson-databind/wiki
http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/
「截止目前(2018/03/01),Jackson 最新版本為 2.9.4」
例如:
編寫一個實體類
User.java:
package com.siwuxie095.entity;
public class User {
private String userId; private String userName; private String userSex; private String userAge;
public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; }
public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; }
public String getUserSex() { return userSex; } public void setUserSex(String userSex) { this.userSex = userSex; }
public String getUserAge() { return userAge; } public void setUserAge(String userAge) { this.userAge = userAge; }
@Override public String toString() { return "User [userId=" + userId + ", userName=" + userName + ", userSex=" + userSex + ", userAge=" + userAge + "]"; }
} |
編寫一個 Controller 類
UserController.java:
package com.siwuxie095.controller;
import java.util.ArrayList; import java.util.List;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;
import com.siwuxie095.entity.User;
@Controller public class UserController {
/** * 注意:這里返回類型不是 ModelAndView * * 使用 @ResponseBody 注解將返回的 POJO * 對象的 List 集合序列化成 JSON */ @RequestMapping("/show/hi") @ResponseBody public List<User> show() {
List<User> userList = new ArrayList<User>(); for (int i = 0; i < 10; i++) { User user = new User(); user.setUserId("100" + i); user.setUserName("小明-"+i); user.setUserSex("男"); user.setUserAge("1" + i); userList.add(user); }
return userList;
}
} |
訪問路徑:
http://localhost:8080/工程名/show.do
原理:
當一個處理請求的方法被標記為 @ResponseBody 時,就說明
該方法需要輸出其它視圖(JSON、XML),SpringMVC 通過
已定義的轉化器做轉化輸出,默認輸出 JSON
注:源碼詳見 spring-webmvc 的 jar 包中第二個包 org.springframework.
web.servlet.config 中第一個類 AnnotationDrivenBeanDefinitionParser
值得注意的是:
@RequestBody 是寫在方法參數前,作用於方法參數
@ResponseBody 是寫在方法上,作用於方法返回值
參考鏈接:
附:
推薦一個模擬發送請求的 Chrome 插件 Advanced REST Client,非常好用!
https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo
【made by siwuxie095】