Джексон сериализует сторонний объект (эластичный поиск) - PullRequest
0 голосов
/ 29 октября 2019

Как правильно сериализовать сторонний код. В этом примере я использую объект агрегации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, в отличие от написания большого количества кодая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...