欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

??序言

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

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

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

比如博主寫了以下程序

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

當我們運行后,用瀏覽器進行訪問

http://127.0.0.1:8080/pt/test1?name=遇事問春風

訪問結(jié)果如下:

注意:

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

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

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

    @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;
    }

日志中也會進行報錯。

建議使用包裝類?。?!

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

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

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

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

??傳遞對象

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

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

Spring MVC也可以?動實現(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(基本類型則賦值為默認初識值,?如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 進?參數(shù)重命名時,請求參數(shù)只能和@RequestParam 聲明的名稱?致,才能進?參數(shù)綁定和賦值.

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

如果我們不想讓他變成必傳參數(shù),我們可以通過設置@RequestParam 中的 required=false (默認為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ù)關系

傳參方式與上述數(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(歐洲計算機協(xié)會制定的js規(guī)范)的?個?集,采?完全獨?于編程語?的?本格式來存儲和表?數(shù)據(jù)。

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

主要負責在不同的語?中數(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)點

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

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

??傳遞JSON對象

接收JSON對象,需要使? @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:路徑變量

和字?表達的意思?樣,這個注解主要作?在請求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

代碼實現(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ā)送請求

我們到相應路徑進行查看是否上穿成功

??獲取Cooki/Session

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

【JavaEE進階】 獲取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é)

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

相關文章

  • SpringBoot中TypeExcludeFilter的作用及使用方式

    SpringBoot中TypeExcludeFilter的作用及使用方式

    在SpringBoot應用程序中,TypeExcludeFilter通過過濾特定類型的組件,使它們不被自動掃描和注冊為bean,這在排除不必要的組件或特定實現(xiàn)類時非常有用,通過創(chuàng)建自定義過濾器并注冊到spring.factories文件中,我們可以在應用啟動時生效
    2025-01-01
  • Java中遍歷集合的并發(fā)修改異常解決方案實例代碼

    Java中遍歷集合的并發(fā)修改異常解決方案實例代碼

    當你遍歷集合的同時,又往集合中添加或者刪除元素,就可能報并發(fā)修改異常,下面這篇文章主要給大家介紹了關于Java中遍歷集合的并發(fā)修改異常解決方案的相關資料,需要的朋友可以參考下
    2022-12-12
  • 使用Spring底層組件實現(xiàn)Aware接口

    使用Spring底層組件實現(xiàn)Aware接口

    這篇文章主要介紹了使用Spring底層組件實現(xiàn)Aware接口,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Java本地緩存的實現(xiàn)代碼

    Java本地緩存的實現(xiàn)代碼

    本篇文章主要介紹了Java本地緩存的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot中的聲明式事務詳解

    SpringBoot中的聲明式事務詳解

    這篇文章主要介紹了SpringBoot中的聲明式事務詳解,Spring采用統(tǒng)一的機制來處理不同的數(shù)據(jù)訪問技術(shù)的事務, Spring的事務提供一個PlatformTransactionManager的接口,不同的數(shù)據(jù)訪問技術(shù)使用不同的接口實現(xiàn),需要的朋友可以參考下
    2023-08-08
  • idea整合deepseek實現(xiàn)AI輔助編程的流程步驟

    idea整合deepseek實現(xiàn)AI輔助編程的流程步驟

    文章介紹了如何在IntelliJ IDEA中整合DeepSeek平臺實現(xiàn)AI輔助編程,步驟包括安裝CodeGPT插件、注冊DeepSeek開發(fā)者賬號、配置API密鑰以及設置API信息,需要的朋友可以參考下
    2025-02-02
  • SWT(JFace)體驗之打開多個Form

    SWT(JFace)體驗之打開多個Form

    SWT(JFace)體驗之打開多個Form的實現(xiàn)代碼。
    2009-06-06
  • springboot以FTP方式上傳文件到遠程服務器

    springboot以FTP方式上傳文件到遠程服務器

    這篇文章主要介紹了springboot以FTP方式上傳文件到遠程服務器,需要的朋友可以參考下
    2019-12-12
  • java 取出文本文件中空行的實例代碼

    java 取出文本文件中空行的實例代碼

    這篇文章介紹了java 取出文本文件中空行的實例代碼,有需要的朋友可以參考一下
    2013-09-09
  • 談談java的concurrent用法

    談談java的concurrent用法

    這篇文章給大家介紹java的concurrent用法,感興趣的朋友一起學習吧
    2015-10-10

最新評論