自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

升級SpringBoot版本,引出了一個大Bug

開發(fā) 架構(gòu)
有一天,項目組的同事反饋給我說,我之前有個接口在新的測試環(huán)境報錯了,具體異常是:Missing argment level for method parameter of type Integer。

前言

最近項目組升級了SpringBoot?版本,由之前的2.0.4?升級到最新版本2.7.5,卻引出了一個大Bug。

到底是怎么回事呢?

1、案發(fā)現(xiàn)場

有一天,項目組的同事反饋給我說,我之前有個接口在新的測試環(huán)境報錯了,具體異常是:Missing argment level for method parameter of type Integer。

我當(dāng)時的第一反應(yīng)有點懵,心想這個接口是一個老接口,有一年多的時間都沒改過了,怎么會出問題呢?

他說近期另外一個同事為了部署阿里云服務(wù)器?,把新測試環(huán)境SpringBoot?的版本升級到了最新版。

之后,在測試的過程中,發(fā)現(xiàn)我有個Get請求接口報異常了。

該接口代碼類似于這樣:?在getCategory接口中,有兩個參數(shù):

  1. type表示大類,是必傳的。
  2. level表示要返回幾級分類,比如:4級分類,就傳4,是非必傳的,默認(rèn)就是查4級分類。

就是這樣一個接口的level參數(shù),前端沒有傳參,例如:

結(jié)果被Spring MVC攔截直接報錯了。

2、報錯的原因

從打印的異常信息看,現(xiàn)在level參數(shù)必須要傳值了,之前是可傳,可不傳的。

我后來本打算自定義Spring的轉(zhuǎn)換器,修改一下校驗規(guī)則,跟老版本保持一致。

這樣那些基本接口就不用改了。

但后來發(fā)現(xiàn),被spring-web-5.3.23的源碼無情的打臉了。

在org.springframework.web.method.annotation?包下的AbstractNamedValueMethodArgumentResolver?類的resolveArgument?方法中:多了這樣的校驗。如果該參數(shù)為空,沒有設(shè)置默認(rèn)值,required屬性為true,并且不是Optional類型,則執(zhí)行handleMissingValueAfterConversion?方法。該方法會調(diào)用handleMissingValue方法,具體代碼如圖中所示:最后會拋出之前我看到的那個異常。

原因最新版本的Spring中不允許Get接口的請求參數(shù),在不使用@RequestParam注解時,值為空的情況出現(xiàn)了。

3、如何解決問題?

想要解決上面的報錯問題,其實很簡單,只需在level參數(shù)前加??@RequestParam???注解,并且設(shè)置??required???屬性為??false??。

例如:

圖片

但是后面發(fā)現(xiàn),項目中不只我這一個接口要調(diào)整,其他好多同事的接口,也有類似的問題,需要修改的接口很多。

這個改動的工作量不小。

哭暈在測試。。。

后話

這個問題有很多人中招,所以非常有必要把這個問題分享給大家,防微杜漸。

我之前l(fā)evel參數(shù)不加@RequestParam?注解,也沒設(shè)置required?屬性,當(dāng)時持有的心態(tài)是Spring有默認(rèn)值,有些注解不加,程序也能正常運(yùn)行,既然這樣就可以少寫點代碼,并且在當(dāng)時的版本測試過,沒有出現(xiàn)過什么問題。

這種情況其實是Spring框架的一個bug,已經(jīng)在最新版本中被修復(fù)了。。。

趕緊review一下你們的代碼,看看有沒有類似的用法,不然遲早有一天也會中招。

責(zé)任編輯:姜華 來源: 蘇三說技術(shù)
相關(guān)推薦

2020-06-09 08:06:31

RocketMQ消息耗時

2022-02-28 00:14:30

人工智能數(shù)據(jù)機(jī)器學(xué)習(xí)

2015-07-27 10:34:55

大數(shù)據(jù)大忽悠

2021-09-01 08:58:15

項目 UTFailed

2024-08-12 15:55:51

2010-08-06 14:05:56

WPF

2024-08-14 08:35:38

sql數(shù)據(jù)庫OOM 異常

2025-02-11 09:17:57

2010-04-15 15:23:41

2011-10-18 13:43:31

福布斯信息技術(shù)企業(yè)計算

2022-02-24 11:46:38

區(qū)塊鏈技術(shù)NFT

2021-05-07 07:59:52

WebFluxSpring5系統(tǒng)

2012-05-30 09:40:55

Linux鍋爐

2022-04-06 09:47:55

AI谷歌人工智能

2021-10-08 07:50:57

軟件設(shè)計程序

2014-02-12 14:45:40

Linux文本文件

2024-02-04 16:14:38

線程開發(fā)

2018-06-20 15:50:38

JDK9JVMJDK10

2020-09-29 07:44:20

跨域前后端分離插件

2024-12-31 15:49:54

點贊
收藏

51CTO技術(shù)棧公眾號