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

基于params、@PathVariabl和@RequestParam的用法與區(qū)別說明

 更新時(shí)間:2021年08月11日 15:15:36   作者:流煙默  
這篇文章主要介紹了方法參數(shù)相關(guān)屬性params、@PathVariabl和@RequestParam用法與區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

方法參數(shù)相關(guān)屬性params、@PathVariabl和@RequestParam的使用

【1】params

params:指定request中必須包含某些參數(shù)值是,才讓該方法處理。

    @RequestMapping(value = "testParamsAndHeaders", params = { "username","age!=10" })
    public String testParamsAndHeaders() {
        System.out.println("testParamsAndHeaders");
        return SUCCESS;
    }

params 只是判斷url 或者 form data 中的參數(shù)是否復(fù)合params的定義,并不會(huì)直接綁定數(shù)據(jù)到方法的參數(shù)中!

【2】@PathVariabl

綁定路徑中的占位符參數(shù)到方法參數(shù)變量中;只能綁定路徑中的占位符參數(shù),且路徑中必須有參數(shù)。

無論是 GET 或者POST 只要 URL中有參數(shù)即可!

實(shí)例如下:

  • GET
Request URL:http://localhost:8080/SpringMVC-1/springmvc/testPathVariable/1
  • POST
<form action="springmvc/testPathVariable/1" method="POST">
<input type="text" name="username" value=""/>
<input type="text" name="age" value=""/>
<input type="text" name="sex" value=""/>
<input type="submit" value="submit"/>
</form>

【注意】如果URL中無參數(shù),將會(huì)出錯(cuò);如果URL有參數(shù),但是沒有使用@PathVariabl該注解,那么URL的參數(shù)不會(huì)默認(rèn)與方法參數(shù)綁定!方法里的參數(shù)會(huì)默認(rèn)綁定表單里面對(duì)應(yīng)的參數(shù)!

后臺(tái)code

如果參數(shù)名與占位符一致,則可直接使用@PathVariable;如果不一致,則在@PathVariable( )括號(hào)內(nèi)綁定占位符。

 @RequestMapping("/testPathVariable/{id}")
 public String testPathVariable(@PathVariable("id") Integer id2) {
  System.out.println("testPathVariable: " + id2);
  return SUCCESS;
 }

【3】@RequestParam

該注解相關(guān)屬性如下:

  • value:參數(shù)key,可以不寫,默認(rèn)為"";
  • name:和value作用一樣;
  • required:默認(rèn)值為true,可以不寫;
  • 獲取URL或者 form data 中的參數(shù)

這里寫圖片描述

前臺(tái)請(qǐng)求實(shí)例如下:

  • GET
<a href="springmvc/testRequestParam?userName=tom&age=11&sex=boy" rel="external nofollow" >
  • POST
<form action="springmvc/testRequestParam" method="POST">
<input type="text" name="userName" value=""/>
<input type="text" name="age" value=""/>
<input type="text" name="sex" value=""/>
<input type="submit" value="submit"/>
</form>

注意 :

GET中的參數(shù)形式為:username=tom&age=11&sex=boy

POST中的參數(shù)形式為:以鍵值對(duì)形式保存在form data

這里寫圖片描述

后臺(tái)代碼示例:

	@RequestMapping(value="/regist",produces="application/json;charset=utf-8")
	@ResponseBody
	public String regist(SysUser sysUser , @RequestParam(required=true,name="sex") String sex){
		String userName = sysUser.getUserName();
		String age = sysUser.getAge();
		//...
		return "regist success";
	}

總得來說,均是鍵值對(duì)形式,與@PathVariabl中的占位符形式不同?。?!

在springmvc中使用@PathVariable時(shí),應(yīng)該注意點(diǎn)什么?

近來在做庫存調(diào)劑系統(tǒng)時(shí),我從前臺(tái)到后臺(tái)的傳值方式,主要包括:1個(gè),用@PathVariable或者@RequestParam從路徑??;大于一個(gè),用于更新或者添加操作的,我用的是表單實(shí)體傳到后臺(tái);大于一個(gè),用于查詢的,我用的@RequestBody(好吧,我承認(rèn)這個(gè)只是我覺得好玩,但沒有多少人愿意在后臺(tái)一行又一行的寫:String test=request.getParameter("test");吧?????)

現(xiàn)在,主要就是想說一個(gè)從路徑取值的“坑”,而重中之重,就想說一下我更偏愛的@PathVariable(別問我為什么,/{param}/fn.do,簡單?。?/p>

一、使用@PathVariable的轉(zhuǎn)變過程

首先:

在盤古開天辟地時(shí),就是一切還很混沌時(shí),姑娘我連用@PathVariable取值都沒有取過來,還蒙圈蒙了一小會(huì)兒,完全不明白發(fā)生了什么,因?yàn)槲铱粗业恼Z法和格式,哪兒哪兒都對(duì),但就是沒有傳過來值。我一想我原來寫/{param}/fn.do這種方式傳值的時(shí)候,也沒有問題呀,怎么今天是見鬼了???? 蒙圈完了之后,就發(fā)現(xiàn)端倪了。

請(qǐng)看看我怎么寫的哈:

@RequestMapping("/dealerStock/swapOrder/{orderID}/cancelAuditThisOrder.do")
public @ResponseBody String cancelAuditThisOrder(@PathVariable("OrderID") String strOrderID)){
...
...
}

然后的然后,我就一直沒有請(qǐng)求到這個(gè)方法,更別談什么有沒有取到值的問題!后來解決的時(shí)候,真想一掌拍自己腦門上!

然后:

當(dāng)代碼規(guī)范審查通過后,也經(jīng)過了測(cè)試部的一級(jí)功能業(yè)務(wù)測(cè)試以及業(yè)務(wù)部的二級(jí)業(yè)務(wù)流程測(cè)試。文檔之類的,都準(zhǔn)備好了(我還能再說什么呢,無聲的兩個(gè)呵 呵) 正要布上去生產(chǎn)線的時(shí)候,老大再次審查了一遍代碼,審查到最后也沒個(gè)啥結(jié)果,但是,突然間看到那個(gè)@PathVariable就問了我兩個(gè)問題:一,如果我的ID是不連續(xù)的,這種方法還能好使嗎?比如說:HC 782981;二,是不是只要我拿到這個(gè)請(qǐng)求路徑,而我隨便推測(cè)一個(gè)ID號(hào),就能避過用戶操作別人的數(shù)據(jù)?

姑娘我再次被雷擊倒,無言以對(duì),馬上實(shí)際驗(yàn)證。結(jié)果:Yes! 你說第一個(gè)的結(jié)果是Yes,這個(gè)我很滿意,但第二個(gè)是Yes,就很想哭了。 測(cè)試出結(jié)果后,就請(qǐng)命去干掉這個(gè)問題了。

我的第一步嘗試:

添加method=RequestMethod.post,也就是說用戶不能輸入U(xiǎn)rl地址以get的形式獲取數(shù)據(jù),只能通過系統(tǒng)內(nèi)部請(qǐng)求。

組長:你自己說,就算咱們改成了Post請(qǐng)求,你能不能訪問到?

姑娘:我能,就自己寫一個(gè)按鈕,再用post請(qǐng)求就行了。如果用戶里面有懂點(diǎn)程序編碼的,輕而易舉就能破掉。我再去改

組長:其實(shí),我們只能防君子,哪個(gè)系統(tǒng)都有漏洞,沒有絕對(duì)的權(quán)限控制和安全,但咱們盡量的給做好。

我的第二步嘗試:

在第二步嘗試前,我想了一會(huì)兒。我發(fā)現(xiàn)這個(gè)事件有以下幾個(gè)突破口:一、像訂單編號(hào)這個(gè)敏感的數(shù)據(jù),能不能做到不被推測(cè)出來?二、用戶是根據(jù)訪問路徑,然后加上一個(gè)ID號(hào)去請(qǐng)求,如果用戶拿不到訪問路徑呢?三、要點(diǎn)就是用戶只能操作自己的數(shù)據(jù),我可以在敏感操作的時(shí)候,同時(shí)校驗(yàn)當(dāng)前用戶。四、既然都是@PathVariable這種方式帶來的一些問題,那我可以把相應(yīng)的方法,換掉這種傳值方式。五、用戶看到的是一個(gè)請(qǐng)求方法路徑,我可不可以在路徑中加入隨機(jī)密碼鹽,進(jìn)一步的控制關(guān)鍵操作的訪問。

好吧,為了方便迅速,我直接把這種傳值方式給改了。當(dāng)然也沒有改完,時(shí)間關(guān)系,像一些本來就屬于公開數(shù)據(jù)的內(nèi)容,還是沒改。

我的第三步嘗試:

在第二步的時(shí)候,就已經(jīng)改完代碼了。然后,我覺得我是一個(gè)很較真的人。忙里偷閑,我把我在第二步嘗試中想到了幾個(gè)點(diǎn),都寫代碼測(cè)了測(cè)。最先測(cè)出來的是第三種(同時(shí)檢驗(yàn)當(dāng)前用戶,也就簡單類似于where orderID=? and userID=? ) 其次,還測(cè)了測(cè)那個(gè)密碼鹽值,也確實(shí)能夠控制住,但是,想了想系統(tǒng)的性質(zhì)和資源的最終走向,沒改。然后,去禁止用戶打開開發(fā)者工具或者查看源代碼,然而,這根本不是我能控制住的。我也最多就是能控制住快捷鍵打開,但人家還有鼠標(biāo)?。??????瀏覽器提供的功能,不是我想干掉就干掉滴滴滴滴。

我的第一個(gè)方案,就是改造訂單生成的方式,然后我覺得吧,這個(gè)好像不怎么靠譜。但毫無疑問比當(dāng)前的生成方式要靠譜得太多,但這要改動(dòng)下來,呃,原諒我很慫。

二、個(gè)人總結(jié)

我最大的問題,不是我后來想不出更為優(yōu)雅的方案去解決,而是,我從根本上,對(duì)這是個(gè)問題的問題毫無知覺。我甚至都不覺得那樣有什么問題,這才是我最該考慮的點(diǎn)。

其實(shí),我用@PathVariable或者什么別的方式去傳值,這都無可厚非。但我也應(yīng)該更進(jìn)一步的考慮到它的應(yīng)用場景和系統(tǒng)功能鎖涉及到的數(shù)據(jù),以及可能帶來的后果。就比如說我這個(gè)@PathVariable的問題,在別的查詢一些區(qū)域信息(公共展示數(shù)據(jù))的時(shí)候,我也這么用了,組長也看見了,但為什么他著重說了訂單這一塊,還要求這一塊必須改。反正,我就是欠思考。。。。。。

很多很多的東西,都是建立在日常生活體驗(yàn)上的。我以前就很崇拜架構(gòu)師,現(xiàn)在也很崇拜。但是,我突然明白,架構(gòu)師也不是光有空架子的。就比如說我自己吧,我還算是亂七八糟的想法挺多的那種(雖然并不是每個(gè)都靠譜)但是,做事情不能光憑想象,要實(shí)際操作的。

感覺最近做得比較好一點(diǎn)的就是:

1,因?yàn)橛幸粋€(gè)地方查詢的數(shù)據(jù)有很多,那天我跟組長提出,我要換一種查詢方法,提升查詢效率。然后組長就問我究竟想怎么換?我就直接同時(shí)運(yùn)行了兩套代碼干同樣的事兒給他看,結(jié)果,就很so easy的換成了我想換的那種方式,我想說的話,全都在代碼里。后來弄完了,閑下來,我解釋了一下不同點(diǎn),關(guān)鍵點(diǎn)。

2,因?yàn)閺?qiáng)調(diào)代碼規(guī)范和效率嘛。我就在自己私下寫代碼的時(shí)候,旁邊就放著一本代碼整潔之道,還有阿里代碼規(guī)范手冊(cè),然后還有我閑下來的時(shí)候,去官網(wǎng)找的一些常用數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)類型的應(yīng)用對(duì)比。我是一邊寫,一邊看。有不知道怎么寫的,就干脆先看一眼,照著書寫。剛開始挺痛苦的,因?yàn)閷懸痪渚湾e(cuò)一句,也不能說錯(cuò),就是不夠優(yōu)美。但是,感覺現(xiàn)在慢慢變得好了特別特別多。

所謂經(jīng)驗(yàn),就是經(jīng)常體驗(yàn)。多寫代碼多思考,一定要多寫代碼,多寫優(yōu)雅的代碼。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文帶你學(xué)會(huì)規(guī)則引擎Drools的應(yīng)用

    一文帶你學(xué)會(huì)規(guī)則引擎Drools的應(yīng)用

    Drools?就是一個(gè)開源的業(yè)務(wù)規(guī)則引擎,可以很容易地與?spring?boot?應(yīng)用程序集成,這篇文章就來和大家詳細(xì)聊聊Drools的具體應(yīng)用,需要的可以參考一下
    2023-03-03
  • JSON.toJSONString()方法在Java中的使用方法及應(yīng)用場景

    JSON.toJSONString()方法在Java中的使用方法及應(yīng)用場景

    這篇文章主要給大家介紹了關(guān)于JSON.toJSONString()方法在Java中的使用方法及應(yīng)用場景,JSON.toJSONString是將對(duì)象轉(zhuǎn)化為Json字符串,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • 使用JSONObject生成和解析json的方法

    使用JSONObject生成和解析json的方法

    下面小編就為大家?guī)硪黄褂肑SONObject生成和解析json的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • java swing 實(shí)現(xiàn)加載自定義的字體

    java swing 實(shí)現(xiàn)加載自定義的字體

    這篇文章主要介紹了java swing 實(shí)現(xiàn)加載自定義的字體,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Feign調(diào)用服務(wù)各種坑的處理方案

    Feign調(diào)用服務(wù)各種坑的處理方案

    這篇文章主要介紹了Feign調(diào)用服務(wù)各種坑的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 解析Spring中@Controller@Service等線程安全問題

    解析Spring中@Controller@Service等線程安全問題

    這篇文章主要為大家介紹解析了Spring中@Controller@Service等線程的安全問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 快速解決idea @Autowired報(bào)紅線問題

    快速解決idea @Autowired報(bào)紅線問題

    這篇文章主要介紹了快速解決idea @Autowired報(bào)紅線問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 深入理解Java設(shè)計(jì)模式之策略模式

    深入理解Java設(shè)計(jì)模式之策略模式

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之策略模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2021-11-11
  • SpringBoot監(jiān)控模塊Actuator的用法詳解

    SpringBoot監(jiān)控模塊Actuator的用法詳解

    Spring?Boot?Actuator?是?Spring?Boot?自帶的一個(gè)功能模塊,提供了一組已經(jīng)開箱即用的生產(chǎn)環(huán)境下常用的特性和服務(wù),比如應(yīng)用程序的健康檢查、信息暴露、度量收集、日志記錄等,本文將給大家詳細(xì)SpringBoot監(jiān)控模塊Actuator的用法
    2023-06-06
  • Java集合操作之List接口及其實(shí)現(xiàn)方法詳解

    Java集合操作之List接口及其實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Java集合操作之List接口及其實(shí)現(xiàn)方法,詳細(xì)分析了Java集合操作中List接口原理、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2015-07-07

最新評(píng)論

中山市| 浦北县| 顺平县| 宿州市| 兴安盟| 尼玛县| 睢宁县| 文登市| 泸定县| 龙陵县| 锡林郭勒盟| 化隆| 桐庐县| 红桥区| 双牌县| 库车县| 仪征市| 敖汉旗| 吉安市| 迭部县| 德州市| 曲阜市| 宜宾市| 巨野县| 锡林郭勒盟| 泸溪县| 霞浦县| 讷河市| 错那县| 临朐县| 东乡族自治县| 鄂托克前旗| 甘南县| 奎屯市| 来宾市| 桐城市| 朔州市| 六盘水市| 泌阳县| 天气| 新建县|