That actually explains it:
you probably have a getter to expose the identifier, but no setter to set it. Jackson requires getters and setters (or a constructor that allows values to be set). While that's all very nice for commands and events, snapshots are a slightly different beast. Snapshots are in fact just serialized versions of the aggregate itself.
Since Axon 3.1, you can specify two different serializers: one for events, and one for the rest. Our recommendation would be to use JacksonSerializer for the Events and an XStreamSerializer for the rest.
In Spring Boot, you can configure your JacksonSerializer like this, to have Axon only use it for events, leaving the (default) XStreamSerializer for the other objects:
@Bean
@Qualifier("eventSerializer")
public Serializer eventSerializer() {
// create it and return it
}
Cheers,
Allard