我有兩個使用Spring Boot的REST服務在兩個不同的服務器上運行。我正在使用REST模板進行此通信。在涉及泛型和轉換多態類型的Web服務之間傳遞基類類型列表
這些服務共享一些模型。所有這些模型的類型都是'IDataToTransferred'。
「IDataToTransferred」是由各種模型Bean實現的標記接口。
我需要編寫一個通用邏輯,以在這些REST服務之間傳遞這些模型的列表。
因此我寫了一個邏輯,它使用從發件人服務到Receiver服務的參數 List<? extends IDataToTransferred>
。
更新:一些代碼
IDataToTransferred.java是一個標記接口
DataToBeSent.java
DataToBeSent Implements IDataToTransferred{
//Simple Pojo
}
SenderService.java
sendData(List<? extends IDataToTransferred> uploadDataObjectList){
//Some Code with REST Template
//restTemplate.postForEntity
}
IDataToTransferred接口在通信Web服務之間共享。
DataToBeReceived.java
DataToBeReceived Implements IDataToTransferred{
//Simple Pojo
}
ReceiverService.java
receiveData(List<? extends IDataToTransferred> uploadDataObjectList){
//Some Code to convert uploadDataObjectList to DataToBeReceived
}
注意在REST服務,我總是得到415錯誤。不支持的媒體類型。當我在Receiver上使用相同的List<? extends IDataToTransferred>
時。
當我在Receiver端將其更改爲List<? super IDataToTransferred>
,現在它工作,我猜測是因爲Producer擴展了Consumer超規則。
但問題是,現在我不能在接收方上對IDataToTransferred類型進行類型轉換。在列表中我得到所有linkedHashmap,json被轉換爲這些服務之間的鏈接HashMap。
如何在ReceiverService中獲取DataToBeReceived類對象?
爲了簡單起見,我刪除了控制器。假定它們與服務具有相同的簽名。
你期望得到哪個答案?您尚未發佈一行代碼。沒有什麼魔法可以通過一些不明確的解釋來解決問題。 – StanislavL
當然。我將發佈代碼。儘管我使用@JsonSubTypes獲得瞭解決方案 – DragonZoned