課程
/后端開發(fā)
/Java
/Java高并發(fā)秒殺API之web層
@Pathvariable注解允許參數(shù)為空嗎?
2018-07-26
源自:Java高并發(fā)秒殺API之web層 2-1
正在回答
@PathVariable不能為空,不能設(shè)置默認值,因為null對于url是無意義的。如果參數(shù)確實可能為空,需要默認值,可以使用@RequestParams。
慕慕1234 提問者
非常感謝,我也遇到相同問題了
不能允許為空,但是可以變通。最近遇到個required=false沒用的情況。如下:
@RequestMapping(value?=?"/student/{id}",?RequestMethod.GET) public?Student?student(@PathVariable(required?=?false)?Integer?id)?{ ????//...... ????return?student; }
按照上面的代碼,是希望如果不傳id,Integer id的id就為null,可以查詢所有學(xué)生信息。但是發(fā)現(xiàn),/student這個請求是過不來的,而且會報錯。
試了n次,突然發(fā)現(xiàn),其實/student和/student/{id}是兩個不同的url,當然是不能走同一個請求的呀。于是想到@RequestMapping是可以處理多個url的。于是將上面的@RequestMapping改成下面這樣:
@RequestMapping(value?=?{"/student/{id}",?"/student"},?RequestMethod.GET)
這樣就是可以的,此時的required = false就可以起作用了。
我覺得springmvc處理這塊的邏輯就是:如果required = false,而你沒有傳這個參數(shù),那么它會去找這個參數(shù)去掉之后的替代url (/student),如果發(fā)現(xiàn)有替代的url,就可以處理這個請求,如果沒有找到,就拋出異常不去處理。
所以其實上面的方法也可以拆成兩個方法。
@RequestMapping(value?=?"/student/{id}",?RequestMethod.GET) public?Student?student(@PathVariable?int?id)?{ } @RequestMapping(value?=?"/student",?RequestMethod.GET) public?Student?studentAll()?{ }
舉報
Java實現(xiàn)高并發(fā)秒殺API的第三門課,介紹Web層的設(shè)計和實現(xiàn)
1 回答RequestMapping注解中name參數(shù)的意義?
1 回答我的@Service注解和@Controller 不能注入
2 回答cookie中無參數(shù)
3 回答@CookieValue cookie為空
2 回答oracle id 類型number 實體 int 為什么為空?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2018-07-26
@PathVariable不能為空,不能設(shè)置默認值,因為null對于url是無意義的。
如果參數(shù)確實可能為空,需要默認值,可以使用@RequestParams。
2019-08-20
非常感謝,我也遇到相同問題了
2018-08-28
不能允許為空,但是可以變通。最近遇到個required=false沒用的情況。如下:
按照上面的代碼,是希望如果不傳id,Integer id的id就為null,可以查詢所有學(xué)生信息。但是發(fā)現(xiàn),/student這個請求是過不來的,而且會報錯。
試了n次,突然發(fā)現(xiàn),其實/student和/student/{id}是兩個不同的url,當然是不能走同一個請求的呀。于是想到@RequestMapping是可以處理多個url的。于是將上面的@RequestMapping改成下面這樣:
這樣就是可以的,此時的required = false就可以起作用了。
我覺得springmvc處理這塊的邏輯就是:如果required = false,而你沒有傳這個參數(shù),那么它會去找這個參數(shù)去掉之后的替代url (/student),如果發(fā)現(xiàn)有替代的url,就可以處理這個請求,如果沒有找到,就拋出異常不去處理。
所以其實上面的方法也可以拆成兩個方法。