[QUESTION] toJsonString() with Java 8 time module

Abierto
#1,730 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
25/100
Tipo de issue
Error
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
java
Área
api, backend

Línea de trabajo

Comienza en SearchRequest.toJsonString() y en la configuración de JacksonJsonpMapper mostrada en el issue; después, sigue el rastro de qué mapper serializa los valores de JsonData. Reproduce el ejemplo de consulta de rango con OffsetDateTime y compara el mapper usado para la serialización de la request con el ObjectMapper configurado; se considera completado cuando se identifica una ruta de serialización compatible o se documenta la configuración necesaria.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Hi,
I don't seem to be able to serialise SearchRequest(for example) if i am using OffsetDateTime in my range query.
For example:

OffsetDateTime from, OffsetDateTime to;
BoolQuery.Builder bool = QueryBuilders.bool();
bool.filter(QueryBuilders.range().field("ts").from(JsonData.of(from)).to(JsonData.of(to)).build().toQuery());

SearchRequest searchRequest = new SearchRequest.Builder()
				.size(10000)
				.query(bool.build().toQuery())
				.index(Arrays.stream(indices).toList()).build();

		System.out.println(searchRequest.toJsonString());// This is where the error is

The error is

jakarta.json.JsonException: Cannot find a serializer for type java.time.OffsetDateTime. Consider using a full-featured JsonpMapper.

This is how i init my Opensearch client and setting the mapper which has the timeModule

private OpenSearchClient getClientInternal() {
        final HttpHost host = new HttpHost("https",hostname);
        final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();

        credentialsProvider.setCredentials(new AuthScope(host), new UsernamePasswordCredentials(username, password.toCharArray()));
        
        JsonpMapper mapper = new JacksonJsonpMapper(jacksonObjectMapper);

        var transport = ApacheHttpClient5TransportBuilder.builder(host)
                .setMapper(mapper) //**Set the mapper here which has the timeModule**
                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
        )
        .build();

        return new OpenSearchClient(transport);
    }

My ObjectMapper config

@Bean
    public ObjectMapper jacksonObjectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new JavaTimeModule());
        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        System.out.println("Auto-configured Jackson ObjectMapper bean created. "+ mapper.hashCode());
        return mapper;
    }

I don't see anything wrong, but i still get the error.

Any ideas ?

Lenguaje dominante
Java
Estrellas
165
Forks
257
Merge medio
1 d 1 h
PR fusionados (30 d)
44

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de opensearch-project/opensearch-java

Todos los issues de opensearch-project/opensearch-java

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.