Как правильно сериализовать сторонний код. В этом примере я использую объект агрегацииasticsearch.
Если я напишу следующий RestController:
@PostMapping("/aggregation")
@ResponseStatus(HttpStatus.CREATED)
public Aggregation receiveAggregation(@RequestBody Aggregation aggregation) {
return null;
}
и POST агрегацию к нему:
http POST http://localhost:8080/api/test/aggregation < agg.json
agg.json {"sum#numJawns":{"value":740}}
Я получаю исключение:
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.elasticsearch.search.aggregations.Aggregation` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
at [Source: (PushbackInputStream); line: 1, column: 1]
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67)
at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1452)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1028)
at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:265)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3084)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:239)
... 117 common frames omitted
Я использую Spring Boot и ElasticSearch 6.4.3. Очевидно, что ElasticSearch может сериализовать / десериализовать эти объекты в JSON, и похоже, что они используют XContentBuilder.
Я ожидаю, что есть простой мост или модуль, который я могу добавить к своей конфигурации JacksonConfiguration, в отличие от написания большого количества кодая.