relacionar - persistencia java ejemplo
No se encontrĂ³ ninguna propiedad nula en la clase de entidad java.time.ZonedDateTime para vincular el parĂ¡metro del constructor a (1)
Tengo la misma configuración funcionando, pero utilizando org.springframework.data.mongodb.core.convert. MongoCustomConversions en lugar de org.springframework.data.mongodb.core.convert. Conversiones personalizadas
@Bean
public MongoCustomConversions customConversions() {
final List<Converter> converters = new ArrayList<>();
converters.add(new ZonedDateTimeFromDateConverter());
converters.add(new ZonedDateTimeToDateConverter());
return new MongoCustomConversions(converters);
}
y otra sugerencia, mongo devuelve la fecha en UTC ( https://docs.mongodb.com/manual/reference/method/Date/ ), esto significa que obtendrá la hora en UTC y no en su ZoneId.systemDefault (). Mi deserializador se ve así:
private static final ZoneId DEFAULT_ZONE_READ = ZoneId.of("UTC");
public static class ZonedDateTimeFromDateConverter implements Converter<Date, ZonedDateTime> {
@Override
public ZonedDateTime convert(Date date) {
return date.toInstant().atZone(DEFAULT_ZONE_READ);
}
}
Tengo la siguiente configuracion
Configuración
@Configuration
@EnableMongoRepositories(basePackages = Constants.DATA_SCAN)
@EnableMongoAuditing(auditorAwareRef = "auditorAwareService")
@Import(value = MongoAutoConfiguration.class)
public class DatabaseConfiguration {
@Bean
public ValidatingMongoEventListener validatingMongoEventListener() {
return new ValidatingMongoEventListener(validator());
}
@Bean
public LocalValidatorFactoryBean validator() {
return new LocalValidatorFactoryBean();
}
@Bean
public CustomConversions customConversions() {
final List<Converter<?, ?>> converters = new ArrayList<>();
converters.add(DateToZonedDateTimeConverter.INSTANCE);
converters.add(ZonedDateTimeToDateConverter.INSTANCE);
return new CustomConversions(converters);
}
}
Agregué convertidores personalizados pero todavía estoy recibiendo:
No se ha encontrado ninguna propiedad nula en la clase de entidad java.time.ZonedDateTime para vincular el parámetro del constructor a!
@Document(collection = "user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private String id;
@Field("reset_date")
private ZonedDateTime resetDate = null;
}
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
Clase convertidor
public final class JSRConverters {
private JSRConverters() {}
public static class ZonedDateTimeToDateConverter implements Converter<ZonedDateTime, Date> {
public static final ZonedDateTimeToDateConverter INSTANCE = new ZonedDateTimeToDateConverter();
private ZonedDateTimeToDateConverter() {}
@Override
public Date convert(final ZonedDateTime source) {
return source == null ? null : Date.from(source.toInstant());
}
}
public static class DateToZonedDateTimeConverter implements Converter<Date, ZonedDateTime> {
public static final DateToZonedDateTimeConverter INSTANCE = new DateToZonedDateTimeConverter();
private DateToZonedDateTimeConverter() {}
@Override
public ZonedDateTime convert(final Date source) {
return source == null ? null : ZonedDateTime.ofInstant(source.toInstant(), ZoneId.systemDefault());
}
}
}