I am serialising an instance of class Foo
to send to pubsub. I am using Jackson ObjectMapper to serialise the instance to string before sending it as payload.
<code> @Bean(name = "gcpObjectMapper")
public ObjectMapper gcpMenuSyncMessageObjectMapper(Jackson2ObjectMapperBuilder builder) {
final ObjectMapper objectMapper = builder
.createXmlMapper(false)
.build();
// Some other custom configuration for supporting Java 8 features
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setDefaultTyping(new StdTypeResolverBuilder()
.init(JsonTypeInfo.Id.NONE, null)
.inclusion(JsonTypeInfo.As.EXISTING_PROPERTY)
.typeProperty(null)
.typeIdVisibility(false));
return objectMapper;
}
</code>
<code> @Bean(name = "gcpObjectMapper")
public ObjectMapper gcpMenuSyncMessageObjectMapper(Jackson2ObjectMapperBuilder builder) {
final ObjectMapper objectMapper = builder
.createXmlMapper(false)
.build();
// Some other custom configuration for supporting Java 8 features
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setDefaultTyping(new StdTypeResolverBuilder()
.init(JsonTypeInfo.Id.NONE, null)
.inclusion(JsonTypeInfo.As.EXISTING_PROPERTY)
.typeProperty(null)
.typeIdVisibility(false));
return objectMapper;
}
</code>
@Bean(name = "gcpObjectMapper")
public ObjectMapper gcpMenuSyncMessageObjectMapper(Jackson2ObjectMapperBuilder builder) {
final ObjectMapper objectMapper = builder
.createXmlMapper(false)
.build();
// Some other custom configuration for supporting Java 8 features
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setDefaultTyping(new StdTypeResolverBuilder()
.init(JsonTypeInfo.Id.NONE, null)
.inclusion(JsonTypeInfo.As.EXISTING_PROPERTY)
.typeProperty(null)
.typeIdVisibility(false));
return objectMapper;
}
This bean is injected in my component which handles the publishing of messages:
<code> private ByteString convertPayload(@NotNull Foo payload) throws BusinessRuntimeException {
try {
String jsonString = objectMapper.writeValueAsString(payload);
return ByteString.copyFromUtf8(jsonString);
} catch (JsonProcessingException e) {
log.error("Error converting payload to JSON", e);
throw new BusinessRuntimeException(e);
}
}
</code>
<code> private ByteString convertPayload(@NotNull Foo payload) throws BusinessRuntimeException {
try {
String jsonString = objectMapper.writeValueAsString(payload);
return ByteString.copyFromUtf8(jsonString);
} catch (JsonProcessingException e) {
log.error("Error converting payload to JSON", e);
throw new BusinessRuntimeException(e);
}
}
</code>
private ByteString convertPayload(@NotNull Foo payload) throws BusinessRuntimeException {
try {
String jsonString = objectMapper.writeValueAsString(payload);
return ByteString.copyFromUtf8(jsonString);
} catch (JsonProcessingException e) {
log.error("Error converting payload to JSON", e);
throw new BusinessRuntimeException(e);
}
}
However, the type
key (the class name of the instance) is still included in the string-serialised JSON. How can I configure the object mapper not to include the type
info for the object?