SpringMVC數(shù)據(jù)響應(yīng)詳細介紹
SpringMVC接收到請求和數(shù)據(jù)后,進行一些了的處理,當然這個處理可以是轉(zhuǎn)發(fā)給Service,Service層再調(diào)用Dao層完成的,不管怎樣,處理完以后,都需要將結(jié)果告知給用戶。
比如:根據(jù)用戶ID查詢用戶信息、查詢用戶列表、新增用戶等。
對于響應(yīng),主要就包含兩部分內(nèi)容:
響應(yīng)頁面
響應(yīng)數(shù)據(jù)
- 文本數(shù)據(jù)
- json數(shù)據(jù)
因為異步調(diào)用是目前常用的主流方式,所以我們需要更關(guān)注的就是如何返回JSON數(shù)據(jù),對于其他只需要認識了解即可。
一、環(huán)境準備
- 創(chuàng)建一個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>
創(chuàng)建對應(yīng)的配置類
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數(shù)據(jù)類型自動轉(zhuǎn)換 @EnableWebMvc public class SpringMvcConfig { }
編寫模型類User
public class User { private String name; private int age; //getter...setter...toString省略 }
webapp下創(chuàng)建page.jsp
<html><body><h2>Hello Spring MVC!</h2></body></html>
編寫UserController
@Controller public class UserController { }
最終創(chuàng)建好的項目結(jié)構(gòu)如下:
二、響應(yīng)頁面[了解]
步驟1:設(shè)置返回頁面
@Controller public class UserController { @RequestMapping("/toJumpPage") //注意 //1.此處不能添加@ResponseBody,如果加了該注入,會直接將page.jsp當字符串返回前端 //2.方法需要返回String public String toJumpPage(){ System.out.println("跳轉(zhuǎn)頁面"); return "page.jsp"; } }
步驟2:啟動程序測試
此處涉及到頁面跳轉(zhuǎn),所以不適合采用PostMan進行測試,直接打開瀏覽器,輸入
三、返回文本數(shù)據(jù)[了解]
步驟1:設(shè)置返回文本內(nèi)容
@Controller public class UserController { @RequestMapping("/toText") //注意此處該注解就不能省略,如果省略了,會把response text當前頁面名稱去查找,如果沒有回報404錯誤 @ResponseBody public String toText(){ System.out.println("返回純文本數(shù)據(jù)"); return "response text"; } }
步驟2:啟動程序測試
此處不涉及到頁面跳轉(zhuǎn),因為我們現(xiàn)在發(fā)送的是post請求,可以使用瀏覽器也可以使用PostMan進行測試,輸入地址http://localhost/toText訪問
四、響應(yīng)JSON數(shù)據(jù)
響應(yīng)POJO對象
@Controller public class UserController { @RequestMapping("/toJsonPOJO") @ResponseBody public User toJsonPOJO(){ System.out.println("返回json對象數(shù)據(jù)"); User user = new User(); user.setName("itcast"); user.setAge(15); return user; } }
返回值為實體類對象,設(shè)置返回值為實體類類型,即可實現(xiàn)返回對應(yīng)對象的json數(shù)據(jù),需要依賴==@ResponseBody==注解和==@EnableWebMvc==注解
重新啟動服務(wù)器,訪問http://localhost/toJsonPOJO
響應(yīng)POJO集合對象
@Controller public class UserController { @RequestMapping("/toJsonList") @ResponseBody public List<User> toJsonList(){ System.out.println("返回json集合數(shù)據(jù)"); 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; } }
重新啟動服務(wù)器,訪問http://localhost/toJsonList
知識點1:@ResponseBody
名稱 | @ResponseBody |
---|---|
類型 | ==方法\類注解== |
位置 | SpringMVC控制器方法定義上方和控制類上 |
作用 | 設(shè)置當前控制器返回值作為響應(yīng)體, 寫在類上,該類的所有方法都有該注解功能 |
相關(guān)屬性 | pattern:指定日期時間格式字符串 |
說明:
該注解可以寫在類上或者方法上
寫在類上就是該類下的所有方法都有@ReponseBody功能
當方法上有@ReponseBody注解后
- 方法的返回值為字符串,會將其作為文本內(nèi)容直接響應(yīng)給前端
- 方法的返回值為對象,會將對象轉(zhuǎn)換成JSON響應(yīng)給前端
此處又使用到了類型轉(zhuǎn)換,內(nèi)部還是通過Converter接口的實現(xiàn)類完成的,所以Converter除了前面所說的功能外,它還可以實現(xiàn):
- 對象轉(zhuǎn)Json數(shù)據(jù)(POJO -> json)
- 集合轉(zhuǎn)Json數(shù)據(jù)(Collection -> json)
到此這篇關(guān)于SpringMVC數(shù)據(jù)響應(yīng)詳細介紹的文章就介紹到這了,更多相關(guān)SpringMVC數(shù)據(jù)響應(yīng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot之那些注入不了的Spring占位符(${}表達式)問題
這篇文章主要介紹了SpringBoot之那些注入不了的Spring占位符(${}表達式)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04在Mac下IDEA安裝并使用protobuf方式(Java)
這篇文章主要介紹了在Mac下IDEA安裝并使用protobuf方式(Java),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11老生常談Java中List與ArrayList的區(qū)別
大家都知道List是接口,ArrayList是List接口的一個實現(xiàn)類,接下來通過本文給大家介紹Java中List與ArrayList的區(qū)別,需要的朋友可以參考下2022-08-08Java之Spring AOP 實現(xiàn)用戶權(quán)限驗證
本篇文章主要介紹了Java之Spring AOP 實現(xiàn)用戶權(quán)限驗證,用戶登錄、權(quán)限管理這些是必不可少的業(yè)務(wù)邏輯,具有一定的參考價值,有興趣的可以了解一下。2017-02-02Spring Task定時任務(wù)的實現(xiàn)詳解
這篇文章主要介紹了SpringBoot定時任務(wù)功能詳細解析,這次的功能開發(fā)過程中也算是對其內(nèi)涵的進一步了解,以后遇到定時任務(wù)的處理也更清晰,更有效率了,對SpringBoot定時任務(wù)相關(guān)知識感興趣的朋友一起看看吧2022-08-08IntelliJ IDEA 2020最新激活碼(親測有效,可激活至 2089 年
這篇文章主要介紹了IntelliJ IDEA 2021最新激活碼(親測有效,可激活至 2089 年),非常不錯,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04Springboot2.x結(jié)合Mabatis3.x下Hikari連接數(shù)據(jù)庫報超時錯誤
本文針對Springboot2.x與Mybatis3.x結(jié)合使用時,Hikari連接數(shù)據(jù)庫出現(xiàn)超時錯誤的問題進行了深入分析,并提供了一系列有效的解決方法,感興趣的可以了解一下2023-11-11