У меня есть веб-сокет между двумя Java приложениями, и я хочу, чтобы они общались с помощью печатных сообщений. Приложение A отправляет сообщения Collection<RotationPayload>
с RotationPayload
в виде dto с большим количеством полей.
Приложение B регистрирует свой собственный StompSessionHandler и ожидает, что сообщения будут иметь тип Collection<RotationInfo>
с RotationInfo
, являющимся класс, который extends RotationPayload
. StompSessionHandler выглядит следующим образом:
public class AirportStompSessionHandler implements StompSessionHandler {
@Override
public Type getPayloadType(StompHeaders headers) {
final ParameterizedTypeReference<Collection<RotationInfo>> parameterizedType =
new ParameterizedTypeReference<Collection<RotationInfo>>() {};
return parameterizedType.getType();
}
@Override
public void handleFrame(StompHeaders headers, Object payload) {
final Collection<RotationInfo> message = (Collection<RotationInfo>) payload;
// do stuff with the message
}
// other methods which are not related to the problem...
}
Проблема в том, что приведение не работает, поскольку полезная нагрузка вместо этого Collection<LinkedHashMap>
, даже если в методе getPayloadType
я указал ожидаемый параметризованный тип.
У меня возникло сомнение, что я предположил, что что-то не так ... и что payloadType не может быть параметризованной коллекцией ... это должен быть простой тип объекта?