Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring DataCouchbase对模板和Crudepository使用不同的对象映射器_Java_Spring_Spring Boot_Spring Data Couchbase - Fatal编程技术网

Java Spring DataCouchbase对模板和Crudepository使用不同的对象映射器

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时有一种奇怪的行为,也许你能帮我理解

上下文
  • 我将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
,并使用一个自定义对象映射器解决了这个错误

问题: 为什么使用template
findOperations
时处理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);
    }
  }