【发布时间】:2018-02-21 07:13:28
【问题描述】:
我有两个使用 Spring Boot 的 REST 服务在两个不同的服务器上运行。我正在使用 REST 模板进行此通信。
这两个服务共享一些模型。所有这些模型都是 'IDataToTransferred' 类型。
'IDataToTransferred'是各种Model Bean实现的标记接口。
我需要编写一个通用逻辑来在这些 REST 服务之间传递这些模型的列表。
因此我写了一个使用参数的逻辑
List<? extends IDataToTransferred> 从 Sender 服务到 Receiver 服务。
更新:使用一些代码
IDataToTransferred.java 是一个标记接口
DataToBeSent.java
DataToBeSent Implements IDataToTransferred{
//Simple Pojo
}
SenderService.java
sendData(List<? extends IDataToTransferred> uploadDataObjectList){
//Some Code with REST Template
//restTemplate.postForEntity
}
IDataToTransferred接口在通信的网络服务之间共享。
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> 时。
当我在接收方将其更改为List<? super IDataToTransferred> 时,现在它可以工作了,我猜是因为生产者扩展了消费者超级规则。
但问题是现在我无法在接收方将类型转换为 IDataToTransferred 类型。在列表中我得到所有linkedHashmap,json被转换为这些服务之间的链接HashMap。
如何在 ReceiverService 中获取 DataToBeReceived 类对象?
为简单起见,我删除了控制器。假设它们与服务具有相同的签名。
【问题讨论】:
-
您希望得到哪个答案?您还没有发布任何代码。没有什么魔法可以解决一些解释不清楚的问题。
-
当然。我将发布代码。虽然我使用@JsonSubTypes 得到了解决方案
标签: spring generics jackson resttemplate