Skip to content

timestamp (de)serialization not work on msgpack-jackson 0.9.3 #674

Closed

Description

@changwoo

I saw the news of timestamp extension support on version 0.9.0 and tried it. But I still can't (de)serialize timestamps with the 0.9.3 version. Is it supported also when using Jackson?

I did like this and the "Instant" was serialized as a map of string keys "epochSecond"/"nano" and uint32 values.

private static class A {
    @JsonProperty(index = 0)
    Instant instant = Instant.now();
}

....

    A a = new A();
    ObjectMapper objectMapper = new MessagePackMapper();
    byte[] bytes = objectMapper.writeValueAsBytes(a);

Activity

  1. self-assigned this
    on Sep 8, 2022
  2. komamitsu commented on Sep 9, 2022

    @komamitsu
    Member

    Yes. I don't think Jackson can handle private classes.

    public class Pojo {
        public int i = 42;
        public Instant now = Instant.now();
    }
    
      :
    
        ObjectMapper mapper = new ObjectMapper(new MessagePackFactory());
        Pojo x = new Pojo();
        byte[] bytes = mapper.writeValueAsBytes(x);
        System.out.println(mapper.readValue(bytes, new TypeReference<Map<String, Object>>() {}));
            >>>> {i=42, now={epochSecond=1662712326, nano=653000000}}
  3. changwoo commented on Sep 11, 2022

    @changwoo
    Author

    Yes. I don't think Jackson can handle private classes.

    public class Pojo {
        public int i = 42;
        public Instant now = Instant.now();
    }
    
      :
    
        ObjectMapper mapper = new ObjectMapper(new MessagePackFactory());
        Pojo x = new Pojo();
        byte[] bytes = mapper.writeValueAsBytes(x);
        System.out.println(mapper.readValue(bytes, new TypeReference<Map<String, Object>>() {}));
            >>>> {i=42, now={epochSecond=1662712326, nano=653000000}}

    Jackson CAN handle private classes.

    I mean, the timestamps were not serialized in the extension format.

    Your example Pojo class was serialized like this:

    // 82 a1 69 2a a3 6e 6f 77 82 ab 65 70 6f 63 68 53 65 63 6f 6e 64 ce 63 1d 90 50 a4 6e 61 6e 6f ce 05 8b 11 40 
    //       i  42    n  o  w        e  p  o  c  h  S  e  c  o  n  d                    n  a  n  o
    

    This is not the timestamp extension format. It's just a map with string keys and uint32 values.

  4. komamitsu commented on Sep 11, 2022

    @komamitsu
    Member

    Oops. Sorry, I misread your comment the other way around.

    Supporting only Instant shouldn't be difficult. But someone may want to use java.time.LocalDateTime or other classes. Let me think about it...

  5. komamitsu commented on Sep 14, 2022

    @komamitsu
    Member

    We decided to simply support only Instant. With the feature introduced by #677, Instant instances will be serialized and deserialized automatically.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions