2017-09-12 1 views
0

2 개의 다른 서버에서 실행되는 스프링 부트를 사용하는 두 개의 REST 서비스가 있습니다. 이 통신에 REST 템플릿을 사용하고 있습니다.제네릭과 관련된 다차원 타입의 웹 서비스 간 기본 클래스 전달

이 두 서비스가 공유하는 일부 모델이 있습니다. 이 모든 모델은 'IDataToTransferred'유형입니다.

'IDataToTransferred'는 다양한 Model Beans로 구현 된 마커 인터페이스입니다.

이러한 REST 서비스간에 이러한 모델 목록을 전달하기위한 공통 논리를 작성해야합니다.

따라서 보낸 사람 서비스에서받는 사람 서비스에 이르기까지 매개 변수 List<? extends IDataToTransferred>을 사용하는 논리를 작성했습니다.

업데이트 : 일부 코드

IDataToTransferred.java는 마커 인터페이스

에게

SenderService.java DataToBeSent.java

DataToBeSent Implements IDataToTransferred{ 
    //Simple Pojo 
} 

입니다

sendData(List<? extends IDataToTransferred> uploadDataObjectList){ //Some Code with REST Template //restTemplate.postForEntity } 

IDataToTransferred 통신하는 웹 서비스간에 인터페이스가 공유됩니다.

DataToBeReceived.java

DataToBeReceived Implements IDataToTransferred{ 
//Simple Pojo 
} 

ReceiverService.java REST 서비스에서

receiveData(List<? extends IDataToTransferred> uploadDataObjectList){ 
//Some Code to convert uploadDataObjectList to DataToBeReceived 
} 

참고 난 항상 415 오류가 발생했습니다. 지원되지 않는 미디어 유형입니다. Receiver에서 동일한 List<? extends IDataToTransferred>을 사용할 때.

수신자 측에서 이것을 List<? super IDataToTransferred>으로 변경했는데 이제 작동합니다. Producer가 소비자 수퍼 규칙을 확장했기 때문에 추측하고 있습니다.

하지만 문제는 이제 Receiver Side에서 IDataToTransferred 유형으로 타입 변환 할 수 없다는 것입니다. 목록 내에서 나는 모든 linkedHashmap을 얻고 있습니다. json은 이러한 서비스들 사이에서 연결된 HashMap으로 변환되었습니다.

ReceiverService에서 DataToBeReceived 클래스 개체를 얻으려면 어떻게해야합니까?

간편하게 컨트롤러를 제거했습니다. 그것들은 서비스와 같은 서명을 가지고 있다고 가정한다.

+0

어떤 대답을 기대합니까? 코드 줄을 게시하지 않았습니다. 불분명 한 설명으로 인해 문제를 해결할 수있는 마법은 없습니다. – StanislavL

+0

물론입니다. 나는 코드를 게시 할 것이다. @JsonSubTypes를 사용하는 솔루션이 있지만 – DragonZoned

답변

관련 문제