Java Spring DataCouchbase对模板和Crudepository使用不同的对象映射器
我在使用SpringDataCouchbase时有一种奇怪的行为,也许你能帮我理解 上下文Java Spring DataCouchbase对模板和Crudepository使用不同的对象映射器,java,spring,spring-boot,spring-data-couchbase,Java,Spring,Spring Boot,Spring Data Couchbase,我在使用SpringDataCouchbase时有一种奇怪的行为,也许你能帮我理解 上下文 我将SpringDataCouchbase(v.3.1.9.RELEASE)与SpringBoot2一起使用 我的应用程序有一个具有LocalDate字段的实体,如 我已经配置了基本转换器来处理CouchbaseConfigbean中的LocalDates @Configuration @EnableCouchbaseRepositories(basePackages = {"com.exa
- 我将SpringDataCouchbase(v.3.1.9.RELEASE)与SpringBoot2一起使用
- 我的应用程序有一个具有LocalDate字段的实体,如
CouchbaseConfig
bean中的LocalDates
@Configuration
@EnableCouchbaseRepositories(basePackages = {"com.example.repository.model"})
public class CouchbaseConfig extends AbstractCouchbaseConfiguration {
@Override
public CustomConversions customConversions() {
List<?> converters = Arrays.asList(
LocalDateTimeToStringConverter.INSTANCE,
StringToLocalDateTimeConverter.INSTANCE,
LocalDateToStringConverter.INSTANCE,
StringToLocalDateConverter.INSTANCE);
return new CouchbaseCustomConversions(converters);
}
@WritingConverter
public enum LocalDateToStringConverter implements Converter<LocalDate, String> {
INSTANCE;
@Override
public String convert(LocalDate source) {
return source.format(DateUtils.SHORT_DATE_FORMATTER);
}
}
@ReadingConverter
public enum StringToLocalDateConverter implements Converter<String, LocalDate> {
INSTANCE;
@Override
public LocalDate convert(String source) {
return LocalDate.parse(source, DateUtils.SHORT_DATE_FORMATTER);
}
}
问题在于:由decodeFragment
方法使用的ObjectMapper
是在类内创建的新映射器,该类不使用来自CouchbaseConfig
类的转换器,并且由于没有JavaTimeModule
配置异常com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造java.time.LocalDate的实例
一段时间后,我解决了这个问题,在CouchBaseConfig
中配置了一个不同的translationService
,并使用一个自定义对象映射器解决了这个错误
问题:
为什么使用templatefindOperations
时处理SpringDataCouchbase中的实体的方式与使用Crudepository
时不同?
我做错什么了吗
谢谢你抽出时间
@Configuration
@EnableCouchbaseRepositories(basePackages = {"com.example.repository.model"})
public class CouchbaseConfig extends AbstractCouchbaseConfiguration {
@Override
public CustomConversions customConversions() {
List<?> converters = Arrays.asList(
LocalDateTimeToStringConverter.INSTANCE,
StringToLocalDateTimeConverter.INSTANCE,
LocalDateToStringConverter.INSTANCE,
StringToLocalDateConverter.INSTANCE);
return new CouchbaseCustomConversions(converters);
}
@WritingConverter
public enum LocalDateToStringConverter implements Converter<LocalDate, String> {
INSTANCE;
@Override
public String convert(LocalDate source) {
return source.format(DateUtils.SHORT_DATE_FORMATTER);
}
}
@ReadingConverter
public enum StringToLocalDateConverter implements Converter<String, LocalDate> {
INSTANCE;
@Override
public LocalDate convert(String source) {
return LocalDate.parse(source, DateUtils.SHORT_DATE_FORMATTER);
}
}
public <T> T decodeFragment(String source, Class<T> target) {
try {
return objectMapper.readValue(source, target);
}
catch (IOException e) {
throw new RuntimeException("Cannot decode ad-hoc JSON", e);
}
}