杰克逊错误地将自定义对象反序列化为LinkedHashMap

时间:2019-08-23 15:07:42

标签: java spring websocket jackson deserialization

我有一个非常简单的类,希望通过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

0 个答案:

没有答案