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