W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
如前所述,為了使框架選擇適當(dāng)?shù)?code class="literal" i="1914">MessageConverter,它需要參數(shù)類型以及(可選)內(nèi)容類型信息。選擇適當(dāng)?shù)?code class="literal" i="1915">MessageConverter的邏輯駐留在參數(shù)解析器(HandlerMethodArgumentResolvers
)中,該解析器在調(diào)用用戶定義的處理程序方法之前(即當(dāng)框架知道實(shí)際的參數(shù)類型時(shí))觸發(fā)。如果參數(shù)類型與當(dāng)前有效負(fù)載的類型不匹配,則框架將委派給預(yù)先配置的MessageConverters
的堆棧,以查看其中是否有一個(gè)可以轉(zhuǎn)換有效負(fù)載。如您所見,MessageConverter的Object fromMessage(Message<?> message, Class<?> targetClass);
操作將targetClass
作為其參數(shù)之一。該框架還確保提供的Message
始終包含一個(gè)contentType
頭。當(dāng)沒有contentType標(biāo)頭時(shí),它會(huì)插入按綁定的contentType
標(biāo)頭或默認(rèn)的contentType
標(biāo)頭。contentType
參數(shù)類型的組合是框架確定消息是否可以轉(zhuǎn)換為目標(biāo)類型的機(jī)制。如果找不到合適的MessageConverter
,則會(huì)引發(fā)異常,您可以通過添加自定義MessageConverter
來處理該異常(請(qǐng)參見“用戶定義的消息轉(zhuǎn)換器”)。
但是,如果有效載荷類型與處理程序方法聲明的目標(biāo)類型匹配,該怎么辦?在這種情況下,沒有任何要轉(zhuǎn)換的內(nèi)容,并且有效載荷未經(jīng)修改地傳遞。盡管這聽起來很簡(jiǎn)單且合乎邏輯,但請(qǐng)記住以Message<?>
或Object
作為參數(shù)的處理程序方法。通過將目標(biāo)類型聲明為Object
(在Java中為instanceof
,是所有內(nèi)容),實(shí)際上就放棄了轉(zhuǎn)換過程。
不要期望僅根據(jù)
contentType
將Message
轉(zhuǎn)換為其他類型。請(qǐng)記住,contentType
是目標(biāo)類型的補(bǔ)充。如果需要,您可以提供一個(gè)提示,MessageConverter
可能會(huì)也可能不會(huì)考慮。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: