最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring請求傳遞參數(shù)的解決方案

 更新時間:2024年01月09日 12:02:57   作者:遇事問春風(fēng)乄  
訪問不同的路徑,就是發(fā)送不同的請求.在發(fā)送請求時,可能會帶?些參數(shù),所以我們在學(xué)習(xí)Spring的請求時,主要是學(xué)習(xí)如何傳遞參數(shù)到后端以及后端如何接收,下面給大家講解?Spring請求傳遞參數(shù)詳解,一起看看吧

??序言

訪問不同的路徑,就是發(fā)送不同的請求.在發(fā)送請求時,可能會帶?些參數(shù),所以我們在學(xué)習(xí)Spring的請求時,主要是學(xué)習(xí)如何傳遞參數(shù)到后端以及后端如何接收.

下面博主會對傳遞參數(shù)進(jìn)行一個詳解,咱們主要是使?瀏覽器和Postman來模擬

??傳遞單個參數(shù)

比如博主寫了以下程序

@RequestMapping("pt")
@RestController
public class Test_1_12 {
    @RequestMapping("test1")
    public String test1(String name) {
        return "接收到的參數(shù)名為:" + name;
    }
}

當(dāng)我們運(yùn)行后,用瀏覽器進(jìn)行訪問

http://127.0.0.1:8080/pt/test1?name=遇事問春風(fēng)

訪問結(jié)果如下:

注意:

如果參數(shù)名不一致,獲取不到參數(shù),默認(rèn)沒有傳參,默認(rèn)值為null

    @RequestMapping("test2")
    public String test2(Integer year) {
        return "接收到的參數(shù)名為:" + year;
    }

如果參數(shù)類型不?致,是會進(jìn)行報錯的

    @RequestMapping("test3")
    public String test3(int year) {
        return "接收到的參數(shù)名為:" + year;
    }

如果使?基本類型來接收參數(shù)時,參數(shù)必須傳(除boolean類型),否則會報500錯誤

    @RequestMapping("test4")
    public String test4(String name,Integer year) {
        return "接收到的參數(shù)名為:" + name + " " + year;
    }

日志中也會進(jìn)行報錯。

建議使用包裝類?。?!

??傳遞多個參數(shù)

與傳遞單個參數(shù)一樣

不同的是當(dāng)有多個參數(shù)時,前后端進(jìn)?參數(shù)匹配時,是以參數(shù)的名稱進(jìn)?匹配的,因此參數(shù)的位置是不影響后端獲取參數(shù)的結(jié)果

    @RequestMapping("test4")
    public String test4(String name,Integer year) {
        return "接收到的參數(shù)名為:" + name + " " + year;
    }

??傳遞對象

如果參數(shù)?較多時,?法聲明就需要有很多形參.并且后續(xù)每次新增?個參數(shù),也需要修改?法聲明.

我們不妨把這些參數(shù)封裝為?個對象.

Spring MVC也可以?動實(shí)現(xiàn)對象參數(shù)的賦值,?如Person對象

public class Person {
    private int id;
    private String name;
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
    @RequestMapping("test5")
    public String test5(Person person) {
        return "接收到的參數(shù)名為:" + person.toString();
    }

注意:

Spring會根據(jù)參數(shù)名稱?動綁定到對象的各個屬性上,如果某個屬性未傳遞,則賦值為null(基本類型則賦值為默認(rèn)初識值,?如int類型的屬性,會被賦值為0)

??后端參數(shù)重命名(后端參數(shù)映射)

某些特殊的情況下,前端傳遞的參數(shù)key和我們后端接收的key可以不?致,?如前端傳遞了?個time給后端,?后端是使?createtime字段來接收的,這樣就會出現(xiàn)參數(shù)接收不到的情況,如果出現(xiàn)這種情況,我們就可以使? @RequestParam 來重命名前后端的參數(shù)值.

    @RequestMapping("test6")
    public String test6(@RequestParam("time") String createtime) {
        return "接收到的參數(shù)名為:" + createtime;
    }

注意:

使? @RequestParam 進(jìn)?參數(shù)重命名時,請求參數(shù)只能和@RequestParam 聲明的名稱?致,才能進(jìn)?參數(shù)綁定和賦值.

使? @RequestParam 進(jìn)?參數(shù)重命名時,參數(shù)就變成了必傳參數(shù)

如果我們不想讓他變成必傳參數(shù),我們可以通過設(shè)置@RequestParam 中的 required=false (默認(rèn)為true,必傳)來避免不傳遞時報錯

    @RequestMapping("test6")
    public String test6(@RequestParam(value = "time",required = false) String createtime) {
        return "接收到的參數(shù)名為:" + createtime;
    }

??傳遞數(shù)組

Spring MVC 可以?動綁定數(shù)組參數(shù)的賦值

    @RequestMapping("test7")
    public String test7(String[] names) {
        return "接收到的參數(shù)名為:" + Arrays.toString(names);
    }

數(shù)組傳參時,有以下幾種:
1:http://127.0.0.1:8080/pt/test7?names=張三&names=李四
2:http://127.0.0.1:8080/pt/test7?names=張三%2c李四
3:http://127.0.0.1:8080/pt/test7?names=張三,李四

??傳遞集合

集合參數(shù):和數(shù)組類似,同?個請求參數(shù)名有為多個

不同的時需要使? @RequestParam 綁定參數(shù)關(guān)系

傳參方式與上述數(shù)組傳參三種方式一樣

@RequestMapping("/m6")
public String method6(@RequestParam List<String> listParam){
	return "size:"+listParam.size() + ",listParam:"+listParam;
}

??傳遞JSON數(shù)據(jù)

??JSON概念

JSON:JavaScript Object Notation【JavaScript對象表?法】

JSON是?種輕量級的數(shù)據(jù)交互格式.它基于ECMAScript(歐洲計算機(jī)協(xié)會制定的js規(guī)范)的?個?集,采?完全獨(dú)?于編程語?的?本格式來存儲和表?數(shù)據(jù)。

簡單來說:JSON就是?種數(shù)據(jù)格式,有??的格式和語法,使??本表??個對象或數(shù)組的信息,因此JSON本質(zhì)是字符串.

主要負(fù)責(zé)在不同的語?中數(shù)據(jù)傳遞和交換

??JSON的語法

  • 數(shù)據(jù)在 鍵值對(Key/Value) 中

  • 數(shù)據(jù)由逗號 , 分隔

  • 對象? {} 表?

  • 數(shù)組? [] 表?

  • 值可以為對象,也可以為數(shù)組,數(shù)組中可以包含多個對象

??JSON的兩種結(jié)構(gòu)

  • 對象:?括號 {} 保存的對象是?個?序的 鍵值對 集合.?個對象以左括號 { 開始,右括號 }結(jié)束。每個"鍵"后跟?個冒號 : ,鍵值對使?逗號 , 分隔
  • 數(shù)組: 中括號 [ ] 保存的數(shù)組是值(value)的有序集合.?個數(shù)組以左中括號 [ 開始,右中括號 ] 結(jié)束,值之間使?逗號 , 分隔。

??JSON字符串和Java對象互轉(zhuǎn)

JSON本質(zhì)上是?個字符串,通過?本來存儲和描述數(shù)據(jù)

Spring MVC框架也集成了JSON的轉(zhuǎn)換?具,我們可以直接使?,來完成JSON字符串和Java對象的互轉(zhuǎn)

??JSON的優(yōu)點(diǎn)

  • 簡單易?:語法簡單,易于理解和編寫,可以快速地進(jìn)?數(shù)據(jù)交換
  • 跨平臺?持:JSON可以被多種編程語?解析和?成,可以在不同的平臺和語?之間進(jìn)?數(shù)據(jù)交換和傳輸
  • 輕量級:相較于XML格式,JSON數(shù)據(jù)格式更加輕量級,傳輸數(shù)據(jù)時占?帶寬較?,可以提?數(shù)據(jù)傳輸速度
  • 易于擴(kuò)展:JSON的數(shù)據(jù)結(jié)構(gòu)靈活,?持嵌套對象和數(shù)組等復(fù)雜的數(shù)據(jù)結(jié)構(gòu),便于擴(kuò)展和使?
  • 安全性:JSON數(shù)據(jù)格式是?種純?本格式,不包含可執(zhí)?代碼,不會執(zhí)?惡意代碼,因此具有較?的安全性

基于以上特點(diǎn),JSON在Web應(yīng)?程序中被?泛使?,如前后端數(shù)據(jù)交互、API接?數(shù)據(jù)傳輸?shù)?/p>

??傳遞JSON對象

接收J(rèn)SON對象,需要使? @RequestBody 注解

RequestBody:請求正?,意思是這個注解作?在請求正?的數(shù)據(jù)綁定,請求參數(shù)必須在寫在請求正?中

    @RequestMapping("test9")
    public String test9(@RequestBody Person person) {
        return "接收到的參數(shù)名為:" + person.toString();
    }

我們使用使?Postman來發(fā)送json請求參數(shù)

??獲取URL中參數(shù)@PathVariable

path variable:路徑變量

和字?表達(dá)的意思?樣,這個注解主要作?在請求URL路徑上的數(shù)據(jù)綁定

    @RequestMapping("/test10/{id}/{name}")
    public String test10(@PathVariable Integer id, @PathVariable("name") String userName){
        return "解析參數(shù)id:"+id+",name:"+userName;
    }

注意:

  • 如果?法參數(shù)名稱和需要綁定的URL中的變量名稱?致時,可以簡寫,不?給@PathVariable的屬性賦值,如上述例?中的id變量
  • 如果?法參數(shù)名稱和需要綁定的URL中的變量名稱不?致時,需要@PathVariable的屬性value賦值,如上述例?中的userName變量

??上傳?件@RequestPart

代碼實(shí)現(xiàn)如下:

    @RequestMapping("/test11")
    public String getfile(@RequestPart("file") MultipartFile file) throws IOException {
        //獲取?件名稱
        String fileName = file.getOriginalFilename();
        //?件上傳到指定路徑
        file.transferTo(new File("D:/temp/" + file.getOriginalFilename()));
        return "接收到?件名稱為: "+fileName;
    }

我們這里使用Postman發(fā)送請求

我們到相應(yīng)路徑進(jìn)行查看是否上穿成功

??獲取Cooki/Session

由于這部分內(nèi)容較多,博主單獨(dú)寫了出來。鏈接如下:

【JavaEE進(jìn)階】 獲取Cookie和Session

??獲取Header

獲取Header也分為兩種方式

??傳統(tǒng)獲取 header

    @RequestMapping("/test17")
    public String test17(HttpServletRequest request, HttpServletResponse response) {
        String userAgent = request.getHeader("User-Agent");
        return  "userAgent:"+userAgent;
    }

??簡潔獲取header

    @RequestMapping("/test18")
    public String test18(@RequestHeader("User-Agent") String userAgent) {
        return "userAgent:"+userAgent;
    }

??結(jié)果展示

傳統(tǒng)獲取

簡潔獲取

?總結(jié)

到此這篇關(guān)于 Spring請求如何傳遞參數(shù)詳解的文章就介紹到這了,更多相關(guān) Spring請求傳遞參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

凯里市| 通辽市| 云浮市| 陇南市| 多伦县| 永宁县| 抚州市| 张家界市| 甘肃省| 招远市| 钟山县| 潜山县| 南乐县| 蕲春县| 茂名市| 临安市| 安吉县| 罗山县| 石城县| 大庆市| 南皮县| 霍林郭勒市| 克东县| 鸡西市| 定西市| 正蓝旗| 囊谦县| 银川市| 随州市| 邯郸市| 叙永县| 大名县| 沾益县| 荔波县| 南汇区| 东方市| 樟树市| 永仁县| 临城县| 长兴县| 合川市|