MessagePack Java Jackson Dataformat 在 Map 中不使用 String 为 Key 的序列化

当你希望在 Map 中不使用 String 为 Key,那么你需要使用MessagePackKeySerializer来为 key 进行序列化。

本测试方法,可以在https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serialize/MessagePackSerializer.java中找到。

/**

* testMessagePackSerializationMapKey

*/

@Test

@JsonSerialize(keyUsing = MessagePackKeySerializer.class)

public void testMessagePackSerializationMapKey() {

    logger.debug("testMessagePackSerializationNotCloseInputStream");

    byte[] bytes = new byte[0];

    Integer uuid_a = 101;

    Integer uuid_b = 102;

    // Instantiate ObjectMapper for MessagePack

    ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory());

    Map map = new HashMap<>();

    MessageData messageData = new MessageData();

    // Element A in MAP

    messageData.setUuid(UUID.randomUUID().toString());

    messageData.setName("CWIKI.US - A");

    map.put(uuid_a, messageData);

    // Element B in MAP

    messageData = new MessageData();

    messageData.setUuid(UUID.randomUUID().toString());

    messageData.setName("CWIKI.US - B");

    map.put(uuid_b, messageData);

    try {

        // Serialize a Java object to byte array

        bytes = objectMapper.writeValueAsBytes(map);

        logger.debug("Length of Bytes: [{}]", bytes.length);

        // Deserialize the byte array to a MAP

        Map deserialized = objectMapper.readValue(bytes, new TypeReference>() {

        });

        logger.debug("Deserialized MAP Count: [{}]", deserialized.size());

        logger.debug("MAP index 0: [{}]", deserialized.get(uuid_a).getName());

        assertEquals("CWIKI.US - A", deserialized.get(uuid_a).getName());

    } catch (JsonProcessingException ex) {

        logger.error("Serialize Error", ex);

    } catch (IOException e) {

        e.printStackTrace();

    }

}


https://www.cwiki.us/display/Serialization/MessagePack+Jackson+Dataformat

你可能感兴趣的:(MessagePack Java Jackson Dataformat 在 Map 中不使用 String 为 Key 的序列化)