La configuración personalizada de conevrsión de tipos evita problemas en operaciones SQL causados por redondeo en valores Long. Esta implementación garantiza precisión en transferecnias de datos entre cliente y servidor.
Clase de configuración principal:
package com.ejemplo.config;
import com.ejemplo.util.CustomObjectMapper;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.util.List;
@Configuration
public class ConfiguracionWeb extends WebMvcConfigurationSupport {
@Override
protected void extendMessageConverters(List<HttpMessageConverter<?>> convertidores) {
MappingJackson2HttpMessageConverter convertidorPrincipal = new MappingJackson2HttpMessageConverter();
convertidorPrincipal.setObjectMapper(new CustomObjectMapper());
convertidores.add(0, convertidorPrincipal);
}
}
Mapeador JSON personalizado:
package com.ejemplo.util;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.math.BigInteger;
public class CustomObjectMapper extends ObjectMapper {
private static final String FORMATO_FECHA = "yyyy-MM-dd HH:mm:ss";
public CustomObjectMapper() {
SimpleModule moduloPersonalizado = new SimpleModule()
.addSerializer(Long.class, ToStringSerializer.instance)
.addSerializer(BigInteger.class, ToStringSerializer.instance)
.addSerializer(LocalDateTime.class,
new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(FORMATO_FECHA)))
.addDeserializer(LocalDateTime.class,
new LocalDateDeserializer(DateTimeFormatter.ofPattern(FORMATO_FECHA)));
this.registerModule(moduloPersonalizado);
this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
}
}
Esta implementación serializa tipos Long como cadenas para mantener precisión numérica y define formatos consistentes para fechas. Los convertidores modifiacdos procesan automáticamente las conversiones en peticiones y respuestas HTTP