在spring 引入 elasticsearch 模块后,启动项目会报
WARN [main] CustomConversions [260]-| Registering converter from interface java.util.Map to class org.springframework.data.elasticsearch.core.geo.GeoJsonGeometryCollection as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
跟踪源码
if (converterRegistration.isReading()) {
readingPairs.add(pair);
if (logger.isWarnEnabled() && !converterRegistration.isSimpleSourceType()) {
logger.warn(String.format(READ_CONVERTER_NOT_SIMPLE, pair.getSourceType(), pair.getTargetType()));
}
}
添加elasticsearch geo(地理坐标)转化器的时候会检查该类型是否为基础类型。由于geo类型不是基础类型所以报错。
那这个转换器又是在哪添加的呢?继续跟踪源码
public ElasticsearchCustomConversions(Collection<?> converters) {
super(STORE_CONVERSIONS, converters);
}
static {
List<Converter<?, ?>> converters = new ArrayList<>(GeoConverters.getConvertersToRegister());
converters.add(StringToUUIDConverter.INSTANCE);
converters.add(UUIDToStringConverter.INSTANCE);
converters.add(BigDecimalToDoubleConverter.INSTANCE);
converters.add(DoubleToBigDecimalConverter.INSTANCE);
converters.add(ByteArrayToBase64Converter.INSTANCE);
converters.add(Base64ToByteArrayConverter.INSTANCE);
STORE_CONVERTERS = Collections.unmodifiableList(converters);
STORE_CONVERSIONS = StoreConversions.of(ElasticsearchSimpleTypes.HOLDER, STORE_CONVERTERS);
}
static Collection<Converter<?, ?>> getConvertersToRegister() {
return Arrays.asList(PointToMapConverter.INSTANCE, MapToPointConverter.INSTANCE, //
GeoPointToMapConverter.INSTANCE, MapToGeoPointConverter.INSTANCE, //
GeoJsonToMapConverter.INSTANCE, MapToGeoJsonConverter.INSTANCE, //
GeoJsonPointToMapConverter.INSTANCE, MapToGeoJsonPointConverter.INSTANCE, //
GeoJsonMultiPointToMapConverter.INSTANCE, MapToGeoJsonMultiPointConverter.INSTANCE, //
GeoJsonLineStringToMapConverter.INSTANCE, MapToGeoJsonLineStringConverter.INSTANCE, //
GeoJsonMultiLineStringToMapConverter.INSTANCE, MapToGeoJsonMultiLineStringConverter.INSTANCE, //
GeoJsonPolygonToMapConverter.INSTANCE, MapToGeoJsonPolygonConverter.INSTANCE, //
GeoJsonMultiPolygonToMapConverter.INSTANCE, MapToGeoJsonMultiPolygonConverter.INSTANCE, //
GeoJsonGeometryCollectionToMapConverter.INSTANCE, MapToGeoJsonGeometryCollectionConverter.INSTANCE);
}
框架在初始化时,会为我们添加默认的转化器,其中就包括Geo相关转化器。所以在出现这种warn时,不必担心。如果觉得比较碍眼,在日志配置里,忽略掉该类的warn就可以了。