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

使用springboot 獲取控制器參數(shù)的幾種方法小結(jié)

 更新時(shí)間:2021年12月17日 14:39:31   作者:蝸牛-  
這篇文章主要介紹了使用springboot 獲取控制器參數(shù)的幾種方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

如題,這里介紹springboot 獲取控制器參數(shù)有四種方式

1、無注解下獲取參數(shù)

2、使用@RequestParam獲取參數(shù)

3、傳遞數(shù)組

4、通過URL傳遞參數(shù)

無注解下獲取參數(shù)

無注解下獲取參數(shù),需要控制器層參數(shù)與HTTP請求欄參數(shù)名稱一致,這樣后臺就可以獲取到請求欄的參數(shù)。

	/**
	 * 無注解獲取參數(shù)時(shí),參數(shù)名稱和HTTP請求參數(shù)必須一致
	 * @param name String 姓名
	 * @param age int 年齡
	 * @param score double 分?jǐn)?shù)
	 * @return 響應(yīng)json字符-@ResponseBody注解將map轉(zhuǎn)為json
	 */
	@RequestMapping("/param/noannotation")
	@ResponseBody
	public Map<String, Object> noAnnotation(String name,int age, double score) {
		Map<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put("name", name);
		paramMap.put("age", age);
		paramMap.put("score", score);
		return paramMap;
	}

方法中,我們接收三個(gè)參數(shù),分別為name,age和score

啟動(dòng)springboot后,在瀏覽器中請求URL:http://localhost:8080/param/noannotation?name=zhangsan&age=14&score=89.1

前端頁面會(huì)自動(dòng)得到我們輸入的參數(shù)的json形式

如果我們的請求URL中name不給參數(shù)值 http://localhost:8080/param/noannotation?name=&age=12&score=89.1

請求可以正常跳轉(zhuǎn)

如果我們將int 或 long 參數(shù)為空,給URL http://localhost:8080/param/noannotation?name=lisi&age=12&score=

請求會(huì)報(bào)錯(cuò)

無法將String型參數(shù)轉(zhuǎn)化為需要的double型。

這里可以看出,如果我們不給參數(shù)賦值,那么spring會(huì)將空著的參數(shù)默認(rèn)按照String型空字符串處理。所以,如果是String型的參數(shù),為空時(shí)不報(bào)錯(cuò)的;若是非String型參數(shù),則必須非空。

使用@RequestParam獲取參數(shù)

上面的無注解情況下,HTTP參數(shù)與控制器參數(shù)名稱必須一致。若HTTP參數(shù)與控制器參數(shù)不一致時(shí),我們就需要將前端參數(shù)與后端參數(shù)對應(yīng)起來,這里我們使用@RequestParam來確定前后端參數(shù)名稱的映射關(guān)系。

	/**
	 * 使用@RequestParam獲取參數(shù)
	 * 這里RequestParam注解會(huì)將括號里面的前端參數(shù)名稱轉(zhuǎn)化為后面的參數(shù)名稱
	 * @param name String 姓名,接收前端username參數(shù)
	 * @param age int 年齡,接收前端user_age參數(shù)
	 * @param score double 分?jǐn)?shù),接收前端score參數(shù)
	 * @return 響應(yīng)json字符
	 */
	@RequestMapping("/param/requestparam")
	@ResponseBody
	public Map<String, Object> requestParam(
			@RequestParam("username") String name,
			@RequestParam("user_age") int age, 
			@RequestParam("score") double score) {
		Map<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put("name", name);
		paramMap.put("age", age);
		paramMap.put("score", score);
		return paramMap;
	}

方法中,我們接收前端的username,user_age和score,然后使用@RequestParam注解將其轉(zhuǎn)化映射為name,age和age。

啟動(dòng)springboot后,URL欄輸入 http://localhost:8080/param/requestparam?username=lisi&user_age=12&score=45.6

可以正常跳轉(zhuǎn),并將結(jié)果展示在前端

如果將URL中username后面值置空,頁面可以正常跳轉(zhuǎn),測試URL

http://localhost:8080/param/requestparam?username=&user_age=12&score=45.6

若我們將user_age 或 score值置空,則頁面會(huì)報(bào)錯(cuò)

與上面無注解時(shí)錯(cuò)誤相同,這里不做解釋了。

如果我們刪除掉URL欄里面username參數(shù)項(xiàng),URL為 http://localhost:8080/param/requestparam?user_age=12&score=45.6

頁面無法正常跳轉(zhuǎn),報(bào)錯(cuò)如下

那如果實(shí)際中,我們確實(shí)有前端可傳可不傳的參數(shù)時(shí),怎么辦?@RequestParam注解給了一個(gè)required屬性,標(biāo)注該參數(shù)項(xiàng)是否必須有,其默認(rèn)值為true,即必須傳值;若該值可能為空,則將required置為false。注意,此時(shí),@RequestParam后面的數(shù)據(jù)類型必須為包裝類型,不可以是簡單類型,若為簡單類型,依然會(huì)報(bào)錯(cuò)。包裝類型時(shí),可以接收null對象;若為簡單類型,則系統(tǒng)依然會(huì)將空字符串與對應(yīng)的簡單類型進(jìn)行強(qiáng)轉(zhuǎn),轉(zhuǎn)換失敗的,則拋異常出來。

我們將上面方法參數(shù)做部分修改,修改如下,由于篇幅關(guān)系,這里不再整體貼整個(gè)方法

	@RequestMapping("/param/requestparam")
	@ResponseBody
	public Map<String, Object> requestParam(
			@RequestParam("username") String name,
			@RequestParam(value = "user_age", required = false) Integer age, 
			@RequestParam(value = "score", required = false) double score) {

上面,我們將age對應(yīng)的類型修改為Integer包裝類型,required設(shè)置為false;score,只是設(shè)置required設(shè)置為false

啟動(dòng)springboot做測試,http://localhost:8080/param/requestparam?username=zhangsan&user_age=&score=89

這里我們將user_age后面的參數(shù)值設(shè)置為空,請求可以正常跳轉(zhuǎn)

我們再修改一下URL參數(shù)項(xiàng),http://localhost:8080/param/requestparam?username=zhangsan&user_age=&score=

系統(tǒng)會(huì)報(bào)400錯(cuò)誤,提示score是空字符串,如果將數(shù)據(jù)類型double修改為Double,就會(huì)返回null了,這個(gè)這里就不測試了

接收前端傳遞的數(shù)組

springMVC中,前端往后端除了可以傳遞一些單值外,也可以傳遞數(shù)組。傳遞數(shù)據(jù)部分沒有太多規(guī)則可言,在后臺控制器部分,定義數(shù)組形式接收數(shù)據(jù),前端傳遞時(shí),將一組數(shù)據(jù)用英文的逗號“,”隔開就可以了。

	@RequestMapping("/param/requestarray")
	@ResponseBody
	public Map<String, Object> requestArray(String[] names, int[] ages, double[] scores) {
		Map<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put("name", names);
		paramMap.put("age", ages);
		paramMap.put("score", scores);
		return paramMap;
	}

啟動(dòng)springboot,URL為

http://localhost:8080/param/requestarray?names=zhangsan,lisi,wangwu&ages=12,14,15&scores=78.9,98,67

我們使用names接收所有的name,多個(gè)name值“zhangsan”、“l(fā)isi”和“wangwu”之間用“,”隔開

頁面可以正常跳轉(zhuǎn)

通過URL傳遞參數(shù)

這里通過URL傳遞參數(shù)與上面的URL不同,上面的URL中均需寫明參數(shù)名和對應(yīng)參數(shù)值,這里的URL傳遞參數(shù),僅需要在地址欄輸入?yún)?shù)值,然后后臺自動(dòng)匹配到對應(yīng)的參數(shù)名。springMVC通過使用處理器映射和@PathVariable注解的組合來獲取URL參數(shù)。首先通過處理器映射可以定位參數(shù)的位置和名稱,而@PathVariable則可以通過名稱來獲取參數(shù)。

	/**
	 * 使用URL傳參
	 * URL傳參時(shí),方法請求URL后使用{}包含參數(shù)名稱,多個(gè)參數(shù)之間使用/分隔
	 * @param name 姓名
	 * @param age 年齡
	 * @param score 成績
	 * @return 響應(yīng)的json數(shù)據(jù)
	 */
	@RequestMapping("/param/geturl/{name}/{age}/{score}")
	@ResponseBody
	public Map<String, Object> getUrlParam(
			@PathVariable("name") String name,
			@PathVariable("age") Integer age,
			@PathVariable("score") Double score) {
		Map<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put("name", name);
		paramMap.put("age", age);
		paramMap.put("score", score);
		return paramMap;
	}

方法中,我們使用了3個(gè){ },分別代表變量name、age和score,方法變量中使用@PathVariable來接收變量,并映射為方法的變量

啟動(dòng)springboot測試,URL為 http://localhost:8080/param/geturl/zhangsan/12/89

正常跳轉(zhuǎn)

如果中間某個(gè)參數(shù)可能為空呢,查了下@PathVariable注解有required屬性,但是經(jīng)測試,發(fā)現(xiàn)這個(gè)屬性無法單獨(dú)使用。

如果中間某個(gè)參數(shù)為空,還得借用@RequestMapping 支持多URL的屬性進(jìn)行處理

假如,age屬性可能為空,那么修改代碼為

	@RequestMapping(value = {"/param/geturl/{name}/{age}/{score}", 
			"/param/geturl/{name}/{score}"})
	@ResponseBody
	public Map<String, Object> getUrlParam(
			@PathVariable("name") String name,
			@PathVariable(value = "age", required = false) Integer age,
			@PathVariable("score") Double score) {

其中,后面的URL中沒有了age參數(shù),這里,視有無age的請求為不同的請求

使用URL http://localhost:8080/param/geturl/zhangsan//89 做測試,可以正常跳轉(zhuǎn)

以上介紹的四種獲取前端參數(shù)的四種方式,內(nèi)容均為本人學(xué)習(xí)整理所得,若其中有不嚴(yán)謹(jǐn)之處,歡迎批評斧正。關(guān)于獲取前端參數(shù),不止上面四種方式,就了解到的還有獲取json和格式化參數(shù)兩種形式,由于涉及頁面內(nèi)容,本篇博文暫時(shí)不做介紹,后面單獨(dú)整理。 希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何更好的使用Java8中方法引用詳解

    如何更好的使用Java8中方法引用詳解

    在Java8中,我們可以直接通過方法引用來簡寫lambda表達(dá)式中已經(jīng)存在的方法,這種特性就叫做方法引用(Method Reference)。下面這篇文章主要給大家介紹了關(guān)于如何更好的使用Java8中方法引用的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09
  • 詳解SpringBoot+Lucene案例介紹

    詳解SpringBoot+Lucene案例介紹

    這篇文章主要介紹了詳解SpringBoot+Lucene案例介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java源碼解析重寫鎖的設(shè)計(jì)結(jié)構(gòu)和細(xì)節(jié)

    Java源碼解析重寫鎖的設(shè)計(jì)結(jié)構(gòu)和細(xì)節(jié)

    這篇文章主要為大家介紹了Java源碼解析重寫鎖的設(shè)計(jì)結(jié)構(gòu)和細(xì)節(jié),這小節(jié)我們以共享鎖作為案列,自定義一個(gè)共享鎖。有需要的朋友可以借鑒參考下
    2022-03-03
  • Java中Arrays.sort自定義一維數(shù)組、二維數(shù)組的排序方式

    Java中Arrays.sort自定義一維數(shù)組、二維數(shù)組的排序方式

    這篇文章主要介紹了Java中Arrays.sort自定義一維數(shù)組、二維數(shù)組的排序方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java生成非對稱型加密公鑰和私鑰的方法

    Java生成非對稱型加密公鑰和私鑰的方法

    這篇文章主要介紹了Java生成非對稱型加密公鑰和私鑰的方法,涉及java非對稱加密的原理與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • java實(shí)現(xiàn)日歷效果的示例代碼

    java實(shí)現(xiàn)日歷效果的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)打印某年全部的日歷信息,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-12-12
  • Mybatis-Plus insertBatch執(zhí)行緩慢的原因查詢

    Mybatis-Plus insertBatch執(zhí)行緩慢的原因查詢

    這篇文章主要介紹了Mybatis-Plus insertBatch執(zhí)行緩慢的原因查詢,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 詳解使用Spring Boot開發(fā)Web項(xiàng)目

    詳解使用Spring Boot開發(fā)Web項(xiàng)目

    這篇文章主要介紹了詳解使用Spring Boot開發(fā)Web項(xiàng)目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • JVM中堆內(nèi)存和棧內(nèi)存的區(qū)別

    JVM中堆內(nèi)存和棧內(nèi)存的區(qū)別

    本文主要介紹了JVM中堆內(nèi)存和棧內(nèi)存的區(qū)別,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • java實(shí)現(xiàn)省市區(qū)三級聯(lián)動(dòng)

    java實(shí)現(xiàn)省市區(qū)三級聯(lián)動(dòng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)省市區(qū)三級聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評論