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

2023-11-27 13:40 更新

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號