fix
This commit is contained in:
@@ -12,11 +12,9 @@ import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.data.convert.ReadingConverter;
|
||||
import org.springframework.data.convert.WritingConverter;
|
||||
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
|
||||
import org.springframework.lang.NonNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
@Configuration
|
||||
public class MongoConfig {
|
||||
@@ -31,9 +29,30 @@ public class MongoConfig {
|
||||
converters.add(new StringToMapConverter());
|
||||
converters.add(new DocumentToMapConverter());
|
||||
converters.add(new MapToStringConverter());
|
||||
|
||||
// ДОБАВИЛИ НАШ НОВЫЙ КОНВЕРТЕР СЮДА
|
||||
converters.add(new StringToDoubleMongoConverter());
|
||||
|
||||
return new MongoCustomConversions(converters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Конвертер для чтения: String -> Double
|
||||
* Спасает от NumberFormatException, если в базе старый текст (например, "Средний")
|
||||
*/
|
||||
@ReadingConverter
|
||||
public static class StringToDoubleMongoConverter implements Converter<String, Double> {
|
||||
@Override
|
||||
public Double convert(@NonNull String source) {
|
||||
try {
|
||||
return Double.parseDouble(source.trim());
|
||||
} catch (NumberFormatException e) {
|
||||
logger.warn("StringToDoubleMongoConverter: Не удалось преобразовать '{}' в Double. Возвращаем 0.0", source);
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Конвертер для чтения: String -> Map<String, Object>
|
||||
* Обрабатывает случай, когда target_audience хранится как строка в MongoDB
|
||||
@@ -52,7 +71,6 @@ public class MongoConfig {
|
||||
}
|
||||
|
||||
try {
|
||||
// Если это уже JSON строка, парсим её
|
||||
if (source.trim().startsWith("{") || source.trim().startsWith("[")) {
|
||||
logger.debug("StringToMapConverter: Parsing JSON string (starts with {} or [)",
|
||||
source.trim().charAt(0));
|
||||
@@ -66,7 +84,7 @@ public class MongoConfig {
|
||||
int resultSize = result != null ? result.size() : 0;
|
||||
|
||||
logger.info("StringToMapConverter: Successfully parsed JSON string to Map. " +
|
||||
"Source length: {} chars, Result size: {} keys, Parse duration: {} ms",
|
||||
"Source length: {} chars, Result size: {} keys, Parse duration: {} ms",
|
||||
sourceLength, resultSize, parseDuration);
|
||||
|
||||
if (parseDuration > 1000) {
|
||||
@@ -85,7 +103,6 @@ public class MongoConfig {
|
||||
|
||||
return result;
|
||||
}
|
||||
// Если это простая строка, создаём пустой Map
|
||||
logger.warn("StringToMapConverter: target_audience is a plain string, not JSON: {}", source);
|
||||
return new HashMap<>();
|
||||
} catch (Exception e) {
|
||||
@@ -134,7 +151,6 @@ public class MongoConfig {
|
||||
|
||||
for (String key : source.keySet()) {
|
||||
Object value = source.get(key);
|
||||
// Рекурсивно конвертируем вложенные Document
|
||||
if (value instanceof Document) {
|
||||
nestedCount++;
|
||||
logger.debug("DocumentToMapConverter: Found nested Document for key: {} at depth {}", key, depth);
|
||||
@@ -142,7 +158,6 @@ public class MongoConfig {
|
||||
} else if (value instanceof org.bson.types.BSONTimestamp ||
|
||||
value instanceof org.bson.types.ObjectId ||
|
||||
value instanceof java.util.Date) {
|
||||
// Сохраняем специальные типы BSON как строки
|
||||
result.put(key, value.toString());
|
||||
} else {
|
||||
result.put(key, value);
|
||||
@@ -151,7 +166,7 @@ public class MongoConfig {
|
||||
|
||||
long duration = System.currentTimeMillis() - startTime;
|
||||
logger.info("DocumentToMapConverter: Successfully converted Document to Map. " +
|
||||
"Keys: {}, Nested documents: {}, Depth: {}, Duration: {} ms",
|
||||
"Keys: {}, Nested documents: {}, Depth: {}, Duration: {} ms",
|
||||
result.size(), nestedCount, depth, duration);
|
||||
|
||||
if (duration > 1000) {
|
||||
@@ -207,4 +222,4 @@ public class MongoConfig {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user