SpringMVC接收到請求和數據後,進行了一些處理,當然這個處理可以是轉發給Service,Service層再調用Dao層完成的,不管怎樣,處理完以後,都需要將結果告知給用戶。
比如:根據用戶ID查詢用戶信息、查詢用戶列表、新增用戶等。
對於響應,主要就包含兩部分內容:
-
響應頁面
-
響應數據
-
文本數據
-
json數據
-
因爲異步調用是目前常用的主流方式,所以我們需要更關注的就是如何返回JSON數據。
-
創建一個Web的Maven項目
-
pom.xml添加Spring依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.itheima</groupId> <artifactId>springmvc_05_response</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.10.RELEASE</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <port>80</port> <path>/</path> </configuration> </plugin> </plugins> </build> </project>
-
創建對應的配置類
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer { protected Class<?>[] getRootConfigClasses() { return new Class[0]; } protected Class<?>[] getServletConfigClasses() { return new Class[]{SpringMvcConfig.class}; } protected String[] getServletMappings() { return new String[]{"/"}; } //亂碼處理 @Override protected Filter[] getServletFilters() { CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); return new Filter[]{filter}; } } @Configuration @ComponentScan("com.itheima.controller") //開啓json數據類型自動轉換 @EnableWebMvc public class SpringMvcConfig { }
-
編寫模型類User
public class User { private String name; private int age; //getter...setter...toString省略 }
-
webapp下創建page.jsp
<html> <body> <h2>Hello Spring MVC!</h2> </body> </html>
-
編寫UserController
@Controller public class UserController { }
最終創建好的項目結構如下:
二、響應頁面
步驟1:設置返回頁面
@Controller
public class UserController {
@RequestMapping("/toJumpPage")
//注意
//1.此處不能添加@ResponseBody,如果加了該注入,會直接將page.jsp當字符串返回前端
//2.方法需要返回String
public String toJumpPage(){
System.out.println("跳轉頁面");
return "page.jsp";
}
}
步驟2:啓動程序測試
此處涉及到頁面跳轉,所以不適合採用PostMan進行測試,直接打開瀏覽器,輸入
http://localhost/toJumpPage
三、返回文本數據
步驟1:設置返回文本內容
@Controller
public class UserController {
@RequestMapping("/toText")
//注意此處該註解就不能省略,如果省略了,會把response text當前頁面名稱去查找,如果沒有回報404錯誤
@ResponseBody
public String toText(){
System.out.println("返回純文本數據");
return "response text";
}
}
步驟2:啓動程序測試
此處不涉及到頁面跳轉,因爲我們現在發送的是GET請求,可以使用瀏覽器也可以使用PostMan進行測試,輸入地址http://localhost/toText
訪問
四、響應JSON數據
響應POJO對象
@Controller
public class UserController {
@RequestMapping("/toJsonPOJO")
@ResponseBody
public User toJsonPOJO(){
System.out.println("返回json對象數據");
User user = new User();
user.setName("itcast");
user.setAge(15);
return user;
}
}
返回值爲實體類對象,設置返回值爲實體類類型,即可實現返回對應對象的json數據,需要依賴@ResponseBody註解和@EnableWebMvc註解
重新啓動服務器,訪問http://localhost/toJsonPOJO
響應POJO集合對象
@Controller
public class UserController {
@RequestMapping("/toJsonList")
@ResponseBody
public List<User> toJsonList(){
System.out.println("返回json集合數據");
User user1 = new User();
user1.setName("傳智播客");
user1.setAge(15);
User user2 = new User();
user2.setName("黑馬程序員");
user2.setAge(12);
List<User> userList = new ArrayList<User>();
userList.add(user1);
userList.add(user2);
return userList;
}
}
重新啓動服務器,訪問http://localhost/toJsonList
知識點1:@ResponseBody
名稱 | @ResponseBody |
---|---|
類型 | 方法\類註解 |
位置 | SpringMVC控制器方法定義上方和控制類上 |
作用 | 設置當前控制器返回值作爲響應體, 寫在類上,該類的所有方法都有該註解功能 |
相關屬性 | pattern:指定日期時間格式字符串 |
說明:
-
該註解可以寫在類上或者方法上
-
寫在類上就是該類下的所有方法都有@ReponseBody功能
-
當方法上有@ReponseBody註解後
-
方法的返回值爲字符串,會將其作爲文本內容直接響應給前端
-
方法的返回值爲對象,會將對象轉換成JSON響應給前端
-
此處又使用到了類型轉換,內部還是通過Converter接口的實現類完成的,所以Converter除了前面所說的功能外,它還可以實現:
-
對象轉Json數據(POJO -> json)
-
集合轉Json數據(Collection -> json)