發(fā)現(xiàn)寶藏
前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。【寶藏入口】。
前言
為了鞏固所學(xué)的知識(shí),作者嘗試著開始發(fā)布一些學(xué)習(xí)筆記類的博客,方便日后回顧。當(dāng)然,如果能幫到一些萌新進(jìn)行新技術(shù)的學(xué)習(xí)那也是極好的。作者菜菜一枚,文章中如果有記錄錯(cuò)誤,歡迎讀者朋友們批評(píng)指正。
(博客的參考源碼可以在我主頁的資源里找到,如果在學(xué)習(xí)的過程中有什么疑問歡迎大家在評(píng)論區(qū)向我提出)
三、SpringMVC 請(qǐng)求與響應(yīng)
1.postman工具簡介
- postman是什么
- postman基本使用
- 下載地址
https://www.postman.com/https://www.postman.com/
- 注冊(cè)登錄
- 創(chuàng)建工作空間
- 切換工作空間
- 新建請(qǐng)求
- 保存請(qǐng)求
- 放大縮小窗口內(nèi)容
- 編輯路徑參數(shù)
2.設(shè)置請(qǐng)求映射路徑
- 問題描述:團(tuán)隊(duì)多人開發(fā),每人設(shè)置不同的請(qǐng)求路徑(不同的模塊,相同的請(qǐng)求路徑),沖突問題如何解決
@Controller
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'info':'springmvc'}";
}
}
@Controller
public class BookController {
//請(qǐng)求路徑映射
@RequestMapping("/book/save")
@ResponseBody
public String save(){
System.out.println("book save ...");
return "{'module':'book save'}";
}
}
- 解決方案:設(shè)置模塊名作為請(qǐng)求路徑前綴
- 當(dāng)模塊中方法較少的時(shí)候,可以直接在請(qǐng)求路徑中加入模塊名前綴
- 當(dāng)模塊中方法名較多的時(shí)候,在模塊上統(tǒng)一加模塊名訪問前綴
- @RequestMapping詳解
1.名稱:@RequestMapping
2.類型:方法注解類注解
3.位置SpringMVC控制器方法定義上方
4.作用:設(shè)置當(dāng)前控制器方法請(qǐng)求訪問路徑,如果設(shè)置在類上統(tǒng)一設(shè)置當(dāng)前控制器方法請(qǐng)求訪問路徑前綴
5.屬性:value(默認(rèn)),請(qǐng)求訪問路徑,或訪問路徑前綴
6.范例:
3.編碼環(huán)境準(zhǔn)備
- pom.xml配置文件導(dǎo)坐標(biāo)和tomcat插件
//servlet技術(shù)
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
//webmvc技術(shù)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
- SpringMvc全局配置類
@Configuration
@ComponentScan("org.example.controller")
public class SpringMvcConfig {
}
- 初始化SpringMVC環(huán)境(同Spring環(huán)境),設(shè)定SpringMVC加載對(duì)應(yīng)的bean
//加載springmvc配置類,產(chǎn)生springmvc容器(本質(zhì)還是spring容器)
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}
//加載指定配置類
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
//設(shè)置由springmvc控制器處理的請(qǐng)求映射路徑
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
- 編寫User實(shí)體類
//此處省略getter、setter和toString方法
public class User {
private String name;
private int age;
private Address address;
}
- 編寫Address實(shí)體類
//此處省略getter、setter和toString方法
public class Address {
private String province;
private String city;
}
- 編寫UserController
//請(qǐng)求參數(shù)
@Controller
public class UserController {
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(){
return "{'module':'common param'}";
}
}
- 配置tomcat啟動(dòng)運(yùn)行
- 在postman中發(fā)送請(qǐng)求訪問 localhost/commonparam
- 文件結(jié)構(gòu)參考
4.get與post請(qǐng)求發(fā)送普通參數(shù)
- get請(qǐng)求發(fā)送普通參數(shù)
普通參數(shù):請(qǐng)求參數(shù)與形參名稱對(duì)應(yīng)即可完成參數(shù)傳遞
- 請(qǐng)求示例
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ,int age){
System.out.println("普通參數(shù)傳遞 name ==> "+name);
System.out.println("普通參數(shù)傳遞 age ==> "+age);
return "{'module':'common param'}";
}
- 運(yùn)行示例
- post請(qǐng)求發(fā)送普通參數(shù)
1.SpringMvc中post請(qǐng)求與get請(qǐng)求代碼寫法統(tǒng)一,區(qū)別于Servlet中的doGet方法和doPost方法
2.post請(qǐng)求的參數(shù)不在路徑中,而是在方法體中,所以在請(qǐng)求體Body中用x-www-form-urlencoded方式編輯參數(shù)
3.form-data方式不僅能傳遞表單還能傳遞文件
- POST請(qǐng)求過濾器解決中文亂碼問題
- 過濾器解決POST請(qǐng)求中文亂碼示例
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
...
//亂碼處理
@Override
protected Filter[] getServletFilters() {
//創(chuàng)建過濾器
CharacterEncodingFilter filter = new CharacterEncodingFilter();
//設(shè)置過濾器過濾字符
filter.setEncoding("UTF-8");
//返回過濾器數(shù)組
return new Filter[]{filter};
}
}
- postman發(fā)送帶中文參數(shù)的post請(qǐng)求示例
- 發(fā)送請(qǐng)求接收返回結(jié)果示例
- 解決請(qǐng)求參數(shù)與形參名稱不一致的問題
普通參數(shù):請(qǐng)求參數(shù)名與形參名不同時(shí),使用@RequestParam注解關(guān)聯(lián)請(qǐng)求參數(shù)名稱與形參名稱之間的關(guān)系
@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name") String userName , int age){
System.out.println("普通參數(shù)傳遞 userName ==> "+userName);
System.out.println("普通參數(shù)傳遞 age ==> "+age);
return "{'module':'common param different name'}";
}
5.其他類型的請(qǐng)求參數(shù)傳遞
- 實(shí)體類對(duì)象POJO
POJO參數(shù):請(qǐng)求參數(shù)與形參對(duì)象中的屬性對(duì)應(yīng)即可完成參數(shù)傳遞
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
System.out.println("pojo參數(shù)傳遞 user ==> "+user);
return "{'module':'pojo param'}";
}
- postman發(fā)送請(qǐng)求請(qǐng)求示例
- 運(yùn)行結(jié)果示例
- 嵌套POJO參數(shù)
在上面的案例中我們發(fā)現(xiàn)pojo對(duì)象中的address屬性并沒有被賦值,它屬于嵌套的POJO參數(shù),在傳參的時(shí)候需要單獨(dú)對(duì)它進(jìn)行賦值
嵌套POJO參數(shù):嵌套屬性按照層次結(jié)構(gòu)設(shè)定名稱即可完成參數(shù)傳遞
- postman傳參示例
- 程序運(yùn)行示例
- 數(shù)組參數(shù)
數(shù)組參數(shù):同名請(qǐng)求參數(shù)可以直接映射到對(duì)應(yīng)名稱的形參數(shù)組對(duì)象中
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes){
System.out.println("數(shù)組參數(shù)傳遞 likes ==> "+ Arrays.toString(likes));
return "{'module':'array param'}";
}
- postman發(fā)送請(qǐng)求示例(相同名稱)
- 程序運(yùn)行示例
4. 集合參數(shù)
集合參數(shù):同名請(qǐng)求參數(shù)可以使用@RequestParam注解映射到對(duì)應(yīng)名稱的集合對(duì)象中作為數(shù)據(jù)
@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List<String> likes){
System.out.println("集合參數(shù)傳遞 likes ==> "+ likes);
return "{'module':'list param'}";
}
- postman發(fā)送請(qǐng)求示例
- 程序運(yùn)行示例
- json數(shù)據(jù)參數(shù)–轉(zhuǎn)集合
- 導(dǎo)入json轉(zhuǎn)換技術(shù)坐標(biāo)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
- 在SpringMvc全局配置類中開啟json數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換注解
1.名稱:@EnableWebMvc
2.類型:配置類注解
3.功能:EnablewebMvc注解功能強(qiáng)大,該注解整合了多個(gè)功能,此處僅使用其中一部分功能,即json數(shù)據(jù)進(jìn)行自動(dòng)類型轉(zhuǎn)換
4.位置:SpringMVC配置類定義上方作用:開啟SpringMVC多項(xiàng)輔助功能
5.范例:
@Configuration
@ComponentScan("org.example.controller")
//開啟json數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換
@EnableWebMvc
public class SpringMvcConfig {
}
- 集合參數(shù):json格式
1.開啟json數(shù)據(jù)格式的自動(dòng)轉(zhuǎn)換,在配置類中開啟@EnableWebMvc
2.使用@RequestBody注解將外部傳遞的json數(shù)組數(shù)據(jù)映射到形參的集合對(duì)象中作為數(shù)據(jù)
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
System.out.println("list common(json)參數(shù)傳遞 list ==> "+likes);
return "{'module':'list common for json param'}";
}
- postman發(fā)送請(qǐng)求示例
- 程序運(yùn)行示例
- json數(shù)據(jù)參數(shù)–轉(zhuǎn)對(duì)象
1.開啟json數(shù)據(jù)格式的自動(dòng)轉(zhuǎn)換,在配置類中開啟@EnableWebMvc
2.使用@RequestBody注解將外部傳遞的json數(shù)據(jù)映射到形參的實(shí)體類對(duì)象中,要求屬性名稱一一對(duì)應(yīng)
1.名稱: @RequestBody
2.類型:形參注解
3.位置:SpringMVC控制器方法形參定義前面
4.作用:將請(qǐng)求中請(qǐng)求體所包含的數(shù)據(jù)傳遞給請(qǐng)求參數(shù),此注解一個(gè)處理器方法只能使用一次
5.范例:
@RequestMapping("/pojoParamForJson")
@ResponseBody
public String pojoParamForJson(@RequestBody User user){
System.out.println("pojo(json)參數(shù)傳遞 user ==> "+user);
return "{'module':'pojo for json param'}";
}
- postman傳參示例
- 程序運(yùn)行示例
7. 日期參數(shù)
使用@DateTimeFormat注解設(shè)置日期類型數(shù)據(jù)格式,默認(rèn)格式y(tǒng)yyy/MM/dd
1.名稱: @DateTimeFormat
2.類型:形參注解
3.位置: SpringMVC控制器方法形參前面作用:設(shè)定日期時(shí)間型數(shù)據(jù)格式
4.范例:
@RequestMapping("/dateParam")
@ResponseBody
public String dataParam(Date date,
@DateTimeFormat(pattern="yyyy-MM-dd") Date date1,
@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
System.out.println("參數(shù)傳遞 date ==> "+date);
System.out.println("參數(shù)傳遞 date1(yyyy-MM-dd) ==> "+date1);
System.out.println("參數(shù)傳遞 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
return "{'module':'data param'}";
}
- postman傳參示例
- 程序運(yùn)行示例
- @RequestBody與@RequestParam區(qū)別
1.區(qū)別
@RequestParam用于接收urI地址傳參,表單傳參(application/x-www-formurlencoded
@RequestBody用于接收json數(shù)據(jù)[application/json]
2.應(yīng)用
后期開發(fā)中,發(fā)送json格式數(shù)據(jù)為主,@RequestBody應(yīng)用較廣
如果發(fā)送非json格式數(shù)據(jù),選用@RequestParam接收請(qǐng)求參數(shù)
6.響應(yīng)
- 響應(yīng)頁面
響應(yīng)頁面/跳轉(zhuǎn)頁面
返回值為String類型,設(shè)置返回值為頁面名稱,即可實(shí)現(xiàn)頁面跳轉(zhuǎn)
@RequestMapping("/toJumpPage")
public String toJumpPage(){
System.out.println("跳轉(zhuǎn)頁面");
return "page.jsp";
}
- 響應(yīng)文本
返回值為String類型,設(shè)置返回值為任意字符串信息,即可實(shí)現(xiàn)返回指定字符串信息,需要依賴@ResponseBody注解
@RequestMapping("/toText")
@ResponseBody
public String toText(){
System.out.println("返回純文本數(shù)據(jù)");
return "response text";
}
- 響應(yīng)pojo對(duì)象
返回值為實(shí)體類對(duì)象,設(shè)置返回值為實(shí)體類類型,即可實(shí)現(xiàn)返回對(duì)應(yīng)對(duì)象的json數(shù)據(jù),需要依賴@ResponseBody注解和@EnableWebMvc注解
@RequestMapping("/toJsonPOJO")
@ResponseBody
public User toJsonPOJO(){
System.out.println("返回json對(duì)象數(shù)據(jù)");
User user = new User();
user.setName("itcast");
user.setAge(15);
return user;
}
- 響應(yīng)pojo集合對(duì)象
返回值為集合對(duì)象,設(shè)置返回值為集合類型,即可實(shí)現(xiàn)返回對(duì)應(yīng)集合的json數(shù)組數(shù)據(jù),需要依賴@ResponseBody注解和@EnableWebMvc注解文章來源:http://www.zghlxwxcb.cn/news/detail-474188.html
@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;
}
總結(jié)
歡迎各位留言交流以及批評(píng)指正,如果文章對(duì)您有幫助或者覺得作者寫的還不錯(cuò)可以點(diǎn)一下關(guān)注,點(diǎn)贊,收藏支持一下。
(博客的參考源碼可以在我主頁的資源里找到,如果在學(xué)習(xí)的過程中有什么疑問歡迎大家在評(píng)論區(qū)向我提出)文章來源地址http://www.zghlxwxcb.cn/news/detail-474188.html
到了這里,關(guān)于SpringMVC 請(qǐng)求與響應(yīng) -- SpringMVC快速入門保姆級(jí)教程(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!