做網(wǎng)站用哪個(gè)軟件寫比較好免費(fèi)優(yōu)化網(wǎng)站
不積跬步,無以至千里;不積小流,無以成江海。大家好,我是閑鶴,微信:xxh_1459,十多年開發(fā)、架構(gòu)經(jīng)驗(yàn),先后在華為、迅雷服役過,也在高校從事教學(xué)3年;目前已創(chuàng)業(yè)了7年多,主要從事物聯(lián)網(wǎng)/車聯(lián)網(wǎng)相關(guān)領(lǐng)域和業(yè)務(wù)。喜歡交友、騎行、寫毛筆字、彈吉他、折騰硬件和寫代碼。
導(dǎo)讀
這是一系列關(guān)于?SpringBoot Web框架實(shí)戰(zhàn)?的教程,從項(xiàng)目的創(chuàng)建,到一個(gè)完整的 web 框架(包括異常處理、攔截器、context 上下文等);從0開始,到一個(gè)可以直接運(yùn)用在生產(chǎn)環(huán)境中的web框架。而且所有源碼均開源:https://github.com/xiongxianhe/springboot
正文
?上一遍《Spring Boot 返回 JSON》?中我們學(xué)習(xí)了如何從 Spring Boot 返回 json 數(shù)據(jù),這篇我們繼續(xù)討論,Spring Boot 如何獲取 HTTP 傳遞的參數(shù)。
從 HTTP 協(xié)議中,我們可知,傳遞參數(shù)的方式有這么幾種:
1. 在 uri 中通過拼接查詢字符串傳遞,這是我們常用的 HTTP GET 方式;
2. 在 HTTP 中的 body 中傳遞,由于 body 中傳遞數(shù)據(jù)的大小不限,所以這種方式可以傳遞多種格式的數(shù)據(jù),如:multipart/form-data、application/x-www-form-urlencode、application/json、application/xml、text/plain、text/html 等;這類方式為 HTTP POST 方式。
下面我們討論幾種常用的方式:
方式一:在 controller 類的 action 方法中,把所需要的參數(shù)作為 action 方法的參數(shù)(get/post)
@RequestMapping("/user/login")public String login(String name, String pwd) {String res = "you input: name:" + name + "; pwd:" + pwd;return res;}
這種方式同時(shí)支持這種方式同時(shí)支持?get
?和?post
(僅支持 multipart/form-data、application/x-www-form-urlencode )
方式二:在 controller 類的 action 方法中, 通過 HttpServletRequest 作為 action 方法的參數(shù)(get/post)
@RequestMapping("/user/login2")
public String login2(HttpServletRequest request) {String name = request.getParameter("name");String pwd = request.getParameter("pwd");return "you input: name:" + name + "; pwd:" + pwd;
}
這種方式同時(shí)支持這種方式同時(shí)支持?get
?和?post
(僅支持 multipart/form-data、application/x-www-form-urlencode )
方式三:在 controller 類的 action 方法中, 通過 bean 作為 action 方法的參數(shù)(get/post)
@RequestMapping("/user/login3")
public String login3(User user) {return user.toString();
}
User.java 內(nèi)容:
package com.jdz.beans;public class User {private Integer uid;private String name;private String pwd;@Overridepublic String toString() {return String.format("uid: %d name: %s pwd:%s", this.uid, this.name, this.pwd);}
}
這種方式同時(shí)支持這種方式同時(shí)支持?get
?和?post
(僅支持 multipart/form-data、application/x-www-form-urlencode )
方式四:通過 @PathVariable 獲取 uri 路徑中的參數(shù)(get)
@RequestMapping(value = "/user/login4/{name}/{pwd}", method = RequestMethod.GET)
public String login4(@PathVariable String name, @PathVariable String pwd) {return "you input: name:" + name + "; pwd:" + pwd;
}
請(qǐng)求方式:
http://localhost:8080/user/login4/name-lg4/pwd-lg4
這種方式只適合?get
?方法
方式五:通過 @RequestParam 注解(get/post)
@RequestMapping("/user/login5")
public String login5(@RequestParam(value = "name", required = true) String name, @RequestParam("pwd") String pwd) {return "you input: name:" + name + "; pwd:" + pwd;
}
這種方式同時(shí)支持這種方式同時(shí)支持?get
?和?post
(僅支持 multipart/form-data、application/x-www-form-urlencode )
方式六:通過 @RequestParam 注解,并用 Map 來接收參數(shù)(get/post)
@RequestMapping("/user/login6")
public String login6(@RequestParam Map<String, Object> params) {return "you input: name:" + params.get("name") + "; pwd:" + params.get("pwd");
}
這種方式同時(shí)支持這種方式同時(shí)支持?get
?和?post
(僅支持 multipart/form-data、application/x-www-form-urlencode )
方式七:通過 @RequestBody 注解,并用 Map 來接收參數(shù)(json)
@RequestMapping("/user/login7")
public String login7(@RequestBody Map<String, Object> params) {return "you input: name:" + params.get("name") + "; pwd:" + params.get("pwd");
}
這種方式適合 application/json ,用于獲取 json 格式
其他
在此基礎(chǔ)上還有其他的方式,上面主要列舉了一些常用的用法,每種用法可以根據(jù)實(shí)際場(chǎng)景進(jìn)行選擇使用。
源碼:https://github.com/xiongxianhe/springboot.git
系列文章
【SpringBoot Web框架實(shí)戰(zhàn)(開源)】001 使用 pom 方式創(chuàng)建 SpringBoot 第一個(gè)項(xiàng)目
【SpringBoot Web框架實(shí)戰(zhàn)教程(開源)】02 SpringBoot 返回 JSON
近期文章
#?車聯(lián)網(wǎng)
【自動(dòng)化運(yùn)維】不要相信人,把所有的東西都交給機(jī)器去處理
從華為無線網(wǎng)絡(luò)框架說Dispatch服務(wù)
百萬級(jí)物聯(lián)網(wǎng)框架設(shè)計(jì)
高并發(fā)服務(wù)器之泄峰
?
# 硬件
stm32驅(qū)動(dòng)直流電機(jī)實(shí)現(xiàn)啟動(dòng)/加速/減速/倒車/停車等功能
stm32 定時(shí)器輸出比較(OC)與PWM的理解和應(yīng)用
stm32 定時(shí)器中斷