Всем привет!
У меня есть java method-keyword на вход которого я передаю словарь из robot-файла.
словарь выглядит так ${limit1}= create dictionary limitType=LOSSMONTHLYLIMIT limitValue=50 accepted=true
структура метода следующая public String getJsonFromDictionary(Map<String, Object> object) {...}
Я ожидаю, что каждое значение в Map’е будет соответствующего типа, так limitType - это String, limitValue - Integer, а accepted - Boolean
Но почему-то все значения приводятся к типу String
Подскажите есть ли решение этой проблемы или же придется конвертировать каждое значение?
Ничего подходящего не нагуглил, кроме документации о Dictionary:
If a dictionary variable is used in a cell with other data (constant strings or other variables), the final value will contain a string representation of the variable value. The end result is thus exactly the same as when using the variable as a scalar with other data in the same cell.
Исходя из этого создал утилитарный класс со следующими методами
public static Map<String,Object> getTypedDictionary(Map<String, String> dictionaryMap) {
if (dictionaryMap == null) {
return null;
}
Map<String, Object> map = new HashMap<>();
for (Map.Entry<String, String> entry: dictionaryMap.entrySet() ) {
Object value = getTypedValue(entry.getValue());
if(!"OMITTED".equals(value)) {
map.put(entry.getKey(), value);
}
}
return map;
}
@SuppressWarnings(value = "unchecked")
public static List getTypedList(List objects) {
List<Object> list = new ArrayList();
for (Object object: objects) {
list.add(getTypedValue(object));
}
return list;
}
@SuppressWarnings(value = "unchecked")
private static Object getTypedValue(Object object) {
if (object instanceof PyList) {
return getTypedList((List) object);
}
if (object instanceof PyDictionaryDerived) {
return getTypedDictionary((Map<String, String>) object);
}
String stringValue = (String) object;
//converting to different types
//Integer
try {
return Integer.valueOf(stringValue);
} catch (Exception ignore){}
//Double
try {
return Double.valueOf(stringValue);
} catch (Exception ignore){}
//Boolean
if (stringValue.equalsIgnoreCase("true") || stringValue.equalsIgnoreCase("false")) {
return Boolean.valueOf(stringValue);
}
//null
if (stringValue.equalsIgnoreCase("null")) {
return null;
}
//String
if (stringValue.startsWith("\"") && stringValue.endsWith("\"")) {
return stringValue.substring(1,stringValue.length()-1);
}
//String by default
return stringValue;
}
Работает нормально, пока нареканий нет, выглядит как какой-то велосипед