1
0
mirror of https://github.com/vbondarevsky/Connector.git synced 2024-11-24 08:42:15 +02:00

Восстановление неподдерживаемых JSON типов (#64)

Co-authored-by: Vladimir Bondarevskiy <vbondarevsky@gmail.com>
This commit is contained in:
truman 2021-11-15 02:12:00 +03:00 committed by GitHub
parent 2f7e37a9bf
commit 6eb6d18e13
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 111 additions and 3 deletions

View File

@ -17,7 +17,7 @@
//
// URL: https://github.com/vbondarevsky/Connector
// e-mail: vbondarevsky@gmail.com
// Версия: 2.3.1
// Версия: 2.3.2
//
// Требования: платформа 1С версии 8.3.10 и выше
@ -312,6 +312,20 @@
// подлежащей преобразованию.
// ** ИменаСвойствСоЗначениямиДата - Строка, Массив Из Строка - имена свойств JSON,
// для которых нужно вызывать восстановление даты из строки.
// ** ИмяФункцииВосстановления - Строка - определяет имя функции, которая будет вызывается при чтении
// каждого свойства и должна иметь следующие параметры:
// ** Свойство - Строка - указывается только при чтении объектов JSON
// ** Значение - Произвольный - значение допустимого для сериализации типа
// ** ДополнительныеПараметры - Произвольный
// Возвращаемое значение:
// Произвольный - значение, десериализованное из JSON.
// ** МодульФункцииВосстановления - Произвольный - определяет модуль, процедура которого будет использована для
// восстановления значения.
// ** ДополнительныеПараметрыФункцииВосстановления - Произвольный - определяет дополнительные параметры, которые
// будут переданы в функцию восстановления значений.
// ** ИменаСвойствДляОбработкиВосстановления - Массив - определяет массив имен свойств JSON, для которых
// будет вызвана функция восстановления.
// ** МаксимальнаяВложенность - Число - определяет максимальный уровень вложенности объекта JSON.
// * ПараметрыЗаписиJSON - ПараметрыЗаписиJSON - используемые при записи объекта JSON.
// * Данные - Строка, ДвоичныеДанные - произвольные данные, которые необходимо отправить в запросе.
// - Структура, Соответствие - поля формы, которые необходимо отправить в запрос:
@ -455,6 +469,20 @@
// * ФорматДатыJSON - ФорматДатыJSON - формат, в котором представлена дата в строке, подлежащей преобразованию.
// * ИменаСвойствСоЗначениямиДата - Массив, Строка - имена свойств JSON,
// для которых нужно вызывать восстановление даты из строки.
// * ИмяФункцииВосстановления - Строка - определяет имя функции, которая будет вызывается при чтении
// каждого свойства и должна иметь следующие параметры:
// ** Свойство - Строка - указывается только при чтении объектов JSON
// ** Значение - Произвольный - значение допустимого для сериализации типа
// ** ДополнительныеПараметры - Произвольный
// Возвращаемое значение:
// Произвольный - значение, десериализованное из JSON.
// * МодульФункцииВосстановления - Произвольный - определяет модуль, процедура которого будет использована для
// восстановления значения.
// * ДополнительныеПараметрыФункцииВосстановления - Произвольный - определяет дополнительные параметры, которые
// будут переданы в функцию восстановления значений.
// * ИменаСвойствДляОбработкиВосстановления - Массив - определяет массив имен свойств JSON, для которых
// будет вызвана функция восстановления.
// * МаксимальнаяВложенность - Число - определяет максимальный уровень вложенности объекта JSON.
//
// Возвращаемое значение:
// Соответствие - ответ сервера в виде десериализованного значения JSON.
@ -749,10 +777,24 @@
// Кодировка - Строка - кодировка текста JSON. Значение по умолчанию - utf-8.
// ПараметрыПреобразования - Структура - параметры преобразования JSON:
// * ПрочитатьВСоответствие - Булево - если Истина, чтение объекта JSON будет выполнено в Соответствие,
// иначе в Структура.
// иначе в Структура.
// * ИменаСвойствСоЗначениямиДата - Массив, Строка, ФиксированныйМассив - имена свойств JSON,
// для которых нужно вызывать восстановление даты из строки.
// * ФорматДатыJSON - ФорматДатыJSON - определяет формат десериализации дат JSON-объектов.
// * ИмяФункцииВосстановления - Строка - определяет имя функции, которая будет вызывается при чтении
// каждого свойства и должна иметь следующие параметры:
// ** Свойство - Строка - указывается только при чтении объектов JSON
// ** Значение - Произвольный - значение допустимого для сериализации типа
// ** ДополнительныеПараметры - Произвольный
// Возвращаемое значение:
// Произвольный - значение, десериализованное из JSON.
// * МодульФункцииВосстановления - Произвольный - определяет модуль, процедура которого будет использована для
// восстановления значения.
// * ДополнительныеПараметрыФункцииВосстановления - Произвольный - определяет дополнительные параметры, которые
// будут переданы в функцию восстановления значений.
// * ИменаСвойствДляОбработкиВосстановления - Массив - определяет массив имен свойств JSON, для которых
// будет вызвана функция восстановления.
// * МаксимальнаяВложенность - Число - определяет максимальный уровень вложенности объекта JSON.
//
// Возвращаемое значение:
// Произвольный - значение, десериализованное из JSON.
@ -773,7 +815,12 @@
ЧтениеJSON,
ПараметрыПреобразованияJSON.ПрочитатьВСоответствие,
ПараметрыПреобразованияJSON.ИменаСвойствСоЗначениямиДата,
ПараметрыПреобразованияJSON.ФорматДатыJSON);
ПараметрыПреобразованияJSON.ФорматДатыJSON,
ПараметрыПреобразованияJSON.ИмяФункцииВосстановления,
ПараметрыПреобразованияJSON.МодульФункцииВосстановления,
ПараметрыПреобразованияJSON.ДополнительныеПараметрыФункцииВосстановления,
ПараметрыПреобразованияJSON.ИменаСвойствДляОбработкиВосстановления,
ПараметрыПреобразованияJSON.МаксимальнаяВложенность);
ЧтениеJSON.Закрыть();
Возврат Объект;
@ -2300,6 +2347,31 @@
КонецФункции
// Восстанавливает значение типа, десериализация которого не поддерживается.
//
// Параметры:
// Свойство - Строка - имя свойства, значение которого нужно восстановить.
// Значение - Строка - значение, которое нужно восстановить.
// ТипыСвойств - Соответствие - типы свойств, которые нужно восстановить.
// * Ключ - Строка - имя свойства. Равно значению параметра Свойство.
// * Значение - Тип - исходный тип значения.
//
// Возвращаемое значение:
// Произвольный - восстановленное значение.
//
Функция ВосстановлениеJson(Свойство, Значение, ТипыСвойств) Экспорт
ТипСвойства = ТипыСвойств.Получить(Свойство);
Если ТипСвойства = Тип("УникальныйИдентификатор") Тогда
Возврат Новый УникальныйИдентификатор(Значение);
ИначеЕсли ТипСвойства = Тип("ДвоичныеДанные") Тогда
Возврат ПолучитьДвоичныеДанныеИзBase64Строки(Значение);
Иначе
Возврат Значение;
КонецЕсли;
КонецФункции
#КонецОбласти
#Область АутентификацияAWS4
@ -2710,6 +2782,11 @@
ПараметрыПреобразованияПоУмолчанию.Вставить("ИмяФункцииПреобразования", Неопределено);
ПараметрыПреобразованияПоУмолчанию.Вставить("МодульФункцииПреобразования", Неопределено);
ПараметрыПреобразованияПоУмолчанию.Вставить("ДополнительныеПараметрыФункцииПреобразования", Неопределено);
ПараметрыПреобразованияПоУмолчанию.Вставить("ИмяФункцииВосстановления", Неопределено);
ПараметрыПреобразованияПоУмолчанию.Вставить("МодульФункцииВосстановления", Неопределено);
ПараметрыПреобразованияПоУмолчанию.Вставить("ДополнительныеПараметрыФункцииВосстановления", Неопределено);
ПараметрыПреобразованияПоУмолчанию.Вставить("ИменаСвойствДляОбработкиВосстановления", Неопределено);
ПараметрыПреобразованияПоУмолчанию.Вставить("МаксимальнаяВложенность", 500);
Возврат ПараметрыПреобразованияПоУмолчанию;

View File

@ -96,6 +96,7 @@
Тесты.Добавить("Тест_КорректноеИсключениеВМетодеКакJson");
Тесты.Добавить("Тест_ПроверкаПреобразованияВJsonНеСериализуемыхЗначений");
Тесты.Добавить("Тест_ПроверкаПреобразованияВариантаЗаписиДатыJSON");
Тесты.Добавить("Тест_ПроверкаВосстановленияНеподдерживаемыхТиповЗначений");
Возврат Тесты;
@ -616,6 +617,36 @@
КонецПроцедуры
Процедура Тест_ПроверкаВосстановленияНеподдерживаемыхТиповЗначений() Экспорт
УникальныйИдентификатор = Новый УникальныйИдентификатор("be4ee795-7f5e-4d1a-be43-a6d6902f5cfd");
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки("test", "utf-8", Ложь);
Json = Новый Структура;
Json.Вставить("УникальныйИдентификатор", Строка(УникальныйИдентификатор));
Json.Вставить("ДвоичныеДанные", ПолучитьBase64СтрокуИзДвоичныхДанных(ДвоичныеДанные));
Json.Вставить("ДругиеДанные", 1);
ПараметрыJSON = Новый Структура;
ПараметрыJSON.Вставить("МодульФункцииВосстановления", КоннекторHTTP);
ПараметрыJSON.Вставить("ИмяФункцииВосстановления", "ВосстановлениеJson");
ТипыСвойств = Новый Соответствие;
ТипыСвойств.Вставить("УникальныйИдентификатор", Тип("УникальныйИдентификатор"));
ТипыСвойств.Вставить("ДвоичныеДанные", Тип("ДвоичныеДанные"));
ПараметрыJSON.Вставить("ДополнительныеПараметрыФункцииВосстановления", ТипыСвойств);
ПараметрыJSON.Вставить("ИменаСвойствДляОбработкиВосстановления", СтрРазделить("УникальныйИдентификатор,ДвоичныеДанные", ","));
Результат = КоннекторHTTP.PostJson(
"https://httpbin.org/post",
Json,
Новый Структура("ПараметрыПреобразованияJSON", ПараметрыJSON));
УтверждениеВерно(Результат["json"]["УникальныйИдентификатор"], УникальныйИдентификатор);
УтверждениеВерно(Результат["json"]["ДвоичныеДанные"], ДвоичныеДанные);
УтверждениеВерно(Результат["json"]["ДругиеДанные"], 1);
КонецПроцедуры
Процедура Тест_PostИРедирект() Экспорт
Ответ = КоннекторHTTP.Get("https://httpbin.org/redirect-to?url=https%3A%2F%2Fya.ru&status_code=301");