SpringCloud 內(nèi)容類型與參數(shù)類型

2023-11-27 13:40 更新

如前所述,為了使框架選擇適當(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ù)contentTypeMessage轉(zhuǎn)換為其他類型。請(qǐng)記住,contentType是目標(biāo)類型的補(bǔ)充。如果需要,您可以提供一個(gè)提示,MessageConverter可能會(huì)也可能不會(huì)考慮。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)