diff --git "a/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" "b/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" index 10914f5..e1f5518 100644 --- "a/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" +++ "b/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" @@ -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); Возврат ПараметрыПреобразованияПоУмолчанию; diff --git "a/src/ru/DataProcessors/\320\242\320\265\321\201\321\202\321\213/Ext/ObjectModule.bsl" "b/src/ru/DataProcessors/\320\242\320\265\321\201\321\202\321\213/Ext/ObjectModule.bsl" index f0fbfa8..6cab127 100644 --- "a/src/ru/DataProcessors/\320\242\320\265\321\201\321\202\321\213/Ext/ObjectModule.bsl" +++ "b/src/ru/DataProcessors/\320\242\320\265\321\201\321\202\321\213/Ext/ObjectModule.bsl" @@ -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");