Spring项目中使用jackson序列化key为对象Map

1.注入ObjectMapper
2.注册类HistoricTaskInstance的序列化和反序列化类HistoricTaskInstanceKeySerializer,HistoricTaskInstanceKeyDeSerializer
3.将新的Modeule注册到ObjectMapper中。
class A{
   //1.注入ObjectMapper,注意这个ObjectMapper是spring全局的。 @Autowired
private ObjectMapper objectMapper; public void setKeyProcessor(){    
    SimpleModule sm = new SimpleModule();
    //注册序列化,反序列化类。
    sm.addKeySerializer(HistoricTaskInstance.class,new HistoricTaskInstanceKeySerializer());
    sm.addKeyDeserializer(HistoricTaskInstance.class,new HistoricTaskInstanceKeyDeSerializer());
    //注册到ObjectMapper中。
    objectMapper.registerModule(sm);
 } 
}

static class HistoricTaskInstanceKeySerializer extends JsonSerializer<HistoricTaskInstance> {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
public void serialize(HistoricTaskInstance historicTaskInstance, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
StringWriter writer = new StringWriter();
objectMapper.writeValue(writer, historicTaskInstance);
jsonGenerator.writeFieldName(writer.toString());
}
}


static class SimpleObjectKeyDeSerializer extends KeyDeserializer {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
public HistoricTaskInstance deserializeKey(String key, DeserializationContext deserializationContext) throws IOException {
return objectMapper.readValue(key, HistoricTaskInstance.class);
}
}

class HistoricTaskInstance{
  private String name;
private String address;
}
 

 

posted @ 2019-06-05 13:14  江南的夏天  阅读(1700)  评论(0编辑  收藏  举报