所以,我有配置
.defaultTyping(NON_FINAL)
正确编写正确序列化的json为:
"headers": [
"org.springframework.messaging.MessageHeaders",
{
现在,问题是MessageHeaders类正在实现映射,但也覆盖了方法,因此它会引发异常。为了适当地进行此序列化,我需要Eaither才能将其序列化为Hashmap,因此:
"headers": [
"java.util.HashMap",
{
或能够明确地将MessageHeaders作为Hashmap(因为它实际上只是映射。
再次问题是:如何序列化对象将映射实现为哈希姆普,或者如何使对象实现映射为哈希姆普。
好吧,我找到了如何使用自定义序列化器进行此操作(诀窍是告诉Serialializer使用java.util.hashmap而不是真实类名称):
public class MessageHeadersJsonSerializer extends JsonSerializer<MessageHeaders>{
@Override
public void serializeWithType(MessageHeaders value, JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
typeSer.writeTypePrefixForObject(value, gen, HashMap.class);
serialize(value, gen, serializers);
typeSer.writeTypeSuffixForObject(value, gen);
}
@Override
public void serialize(MessageHeaders value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
for(Map.Entry<String, Object> entry : value.entrySet()){
gen.writeFieldName(entry.getKey());
gen.writeObject(entry.getValue());
}
}
}
然后将其注册为Mixin:
@JsonSerialize(using = MessageHeadersJsonSerializer.class)
public abstract class MessageHeadersMixIn {}
在父对象上,我可以将其作为hashmap:
public abstract class GenericMessageMixIn<T> {
@JsonCreator
public GenericMessageMixIn(
@JsonProperty("payload") T payload,
@JsonProperty("headers") Map<String, Object> headers
){}
}
最后所有工作都可以!