gpt4 book ai didi

java - 在实体类 java.time.ZonedDateTime 上找不到属性 null 以将构造函数参数绑定(bind)到

转载 作者:IT老高 更新时间:2023-10-28 21:02:54 26 4
gpt4 key购买 nike

我有以下配置

配置

@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);
}
}

我添加了自定义转换器,但我仍然得到:

No property null found on entity class java.time.ZonedDateTime to bind constructor parameter to!

@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>

转换器类

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());
}
}
}

最佳答案

我有相同的设置工作,但使用 org.springframework.data.mongodb.core.convert.MongoCustomConversions 而不是 org.springframework.data.mongodb.core.convert.CustomConversions

@Bean
public MongoCustomConversions customConversions() {

final List<Converter> converters = new ArrayList<>();
converters.add(new ZonedDateTimeFromDateConverter());
converters.add(new ZonedDateTimeToDateConverter());

return new MongoCustomConversions(converters);
}

还有另一个提示,mongo 以 UTC (https://docs.mongodb.com/manual/reference/method/Date/) 格式返回日期,这意味着您将获得 UTC 时间,而不是您的 ZoneId.systemDefault()。我的反序列化器如下所示:

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);
}
}

关于java - 在实体类 java.time.ZonedDateTime 上找不到属性 null 以将构造函数参数绑定(bind)到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42132874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com