我有一个非常简单的类,希望通过Web套接字发送:
@Getter @Builder
public class JobMetadata implements Serializable {
private final LocalDateTime requestCreationTime;
private final boolean forceful;
}
我的STOMP生产者和客户都使用Jackson作为转换器:
final WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
这就是我在客户端处理传入消息的方式:
@Override
public Type getPayloadType(StompHeaders stompHeaders) {
return new TypeToken<HashMap<String, JobMetadata>>(){}.getType();
}
@Override
public void handleFrame(StompHeaders stompHeaders, Object o) {
Map<String, JobMetadata> newJobs = (Map<String, JobMetadata>) o;
String valueClassName = newJobs.get("id1").getClass().getName();
}
valueClassName = java.util.LinkedHashMap
但是不是将序列化的值作为JobMetadata
而是LinkedHashMap
,在这种情况下,我必须解析所有值或代替Jackson编写自定义转换器。
为什么杰克逊将JobMetadata
序列化为LinkedHashMap
?