Skip to content

Commit

Permalink
Возможность указывать параметры записи JSON
Browse files Browse the repository at this point in the history
  • Loading branch information
vbondarevsky committed Feb 11, 2019
1 parent da8aa03 commit 6959534
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 17 deletions.
70 changes: 62 additions & 8 deletions src/CommonModules/КоннекторHTTP/Ext/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
//
// URL: https://github.com/vbondarevsky/Connector
// e-mail: [email protected]
// Версия: 1.1.4
// Версия: 1.1.5
//
// Требования: платформа 1С версии 8.3.10 и выше

Expand Down Expand Up @@ -415,6 +415,8 @@
// Если Ложь, объекты будут считываться в объект типа Структура.
// **ФорматДатыJSON - ФорматДатыJSON - формат, в котором представлена дата в строке, подлежащей преобразованию.
// **ИменаСвойствСоЗначениямиДата - Массив, Строка - имена свойств JSON, для которых нужно вызывать восстановление даты из строки.
// *ПараметрыЗаписиJSON - Структура - параметры, используемые при записи объекта JSON.
// См. в синтаксис-помощнике описание ПараметрыЗаписиJSON.
// *Данные - Структура, Соответствие - поля формы, которые необходимо отправить в запрос:
// *<Ключ> - Строка - имя поля.
// *<Значение> - Строка - значение поля.
Expand Down Expand Up @@ -470,6 +472,7 @@
Запрос.Вставить("Аутентификация", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Аутентификация", Новый Структура));
Запрос.Вставить("Cookies", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Cookies", Новый Массив));
Запрос.Вставить("ПараметрыПреобразованияJSON", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "ПараметрыПреобразованияJSON", Неопределено));
Запрос.Вставить("ПараметрыЗаписиJSON", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "ПараметрыЗаписиJSON", Неопределено));

ПодготовленныйЗапрос = ПодготовитьЗапрос(Сессия, Запрос);

Expand Down Expand Up @@ -589,7 +592,13 @@
ПодготовленныйЗапрос.Вставить("URL", ПодготовитьURL(Запрос.URL, ПараметрыЗапроса));

ПодготовитьCookies(ПодготовленныйЗапрос);
ПодготовитьТелоЗапроса(ПодготовленныйЗапрос, Запрос.Данные, Запрос.Файлы, Запрос.Json, Запрос.ПараметрыПреобразованияJSON);
ПодготовитьТелоЗапроса(
ПодготовленныйЗапрос,
Запрос.Данные,
Запрос.Файлы,
Запрос.Json,
Запрос.ПараметрыПреобразованияJSON,
Запрос.ПараметрыЗаписиJSON);
ПодготовитьАутентификацию(ПодготовленныйЗапрос);

Возврат ПодготовленныйЗапрос;
Expand Down Expand Up @@ -855,7 +864,7 @@

КонецФункции

Процедура ПодготовитьТелоЗапроса(ПодготовленныйЗапрос, Данные, Файлы, Json, ПараметрыПреобразованияJSON)
Процедура ПодготовитьТелоЗапроса(ПодготовленныйЗапрос, Данные, Файлы, Json, ПараметрыПреобразованияJSON, ПараметрыЗаписиJSON)

HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.АдресРесурса = СобратьАдресРесурса(
Expand All @@ -874,7 +883,7 @@
ИначеЕсли ЗначениеЗаполнено(Json) Тогда
ContentType = "application/json";
HTTPЗапрос.УстановитьТелоИзСтроки(
ОбъектВJson(Json, ПараметрыПреобразованияJSON),
ОбъектВJson(Json, ПараметрыПреобразованияJSON, ПараметрыЗаписиJSON),
КодировкаТекста.UTF8,
ИспользованиеByteOrderMark.НеИспользовать);
КонецЕсли;
Expand Down Expand Up @@ -1473,15 +1482,28 @@

КонецФункции

Функция ОбъектВJson(Объект, ПараметрыПреобразования)
Функция ОбъектВJson(Объект, Знач ПараметрыПреобразования, Знач ПараметрыЗаписи)

ПараметрыПреобразованияJSON = ДополнитьПараметрыПреобразованияJSON(ПараметрыПреобразования);

НастройкиСериализации = Новый НастройкиСериализацииJSON;
НастройкиСериализации.ФорматСериализацииДаты = ПараметрыПреобразованияJSON.ФорматДатыJSON;


ПараметрыЗаписи = ДополнитьПараметрыЗаписиJSON(ПараметрыЗаписи);

ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(
ПараметрыЗаписи.ПереносСтрок,
ПараметрыЗаписи.СимволыОтступа,
ПараметрыЗаписи.ИспользоватьДвойныеКавычки,
ПараметрыЗаписи.ЭкранированиеСимволов,
ПараметрыЗаписи.ЭкранироватьУгловыеСкобки,
ПараметрыЗаписи.ЭкранироватьРазделителиСтрок,
ПараметрыЗаписи.ЭкранироватьАмперсанд,
ПараметрыЗаписи.ЭкранироватьОдинарныеКавычки,
ПараметрыЗаписи.ЭкранироватьСлеш);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписатьJSON(ЗаписьJSON, Объект, НастройкиСериализации);

Возврат ЗаписьJSON.Закрыть();
Expand Down Expand Up @@ -1524,6 +1546,21 @@

КонецФункции

Функция ДополнитьПараметрыЗаписиJSON(ПараметрыЗаписи)

ПараметрыЗаписиJSON = ПолучитьПараметрыЗаписиJSONПоУмолчанию();
Если ЗначениеЗаполнено(ПараметрыЗаписи) Тогда
Для Каждого Параметр Из ПараметрыЗаписи Цикл
Если ПараметрыЗаписиJSON.Свойство(Параметр.Ключ) Тогда
ПараметрыЗаписиJSON.Вставить(Параметр.Ключ, Параметр.Значение);
КонецЕсли;
КонецЦикла;
КонецЕсли;

Возврат ПараметрыЗаписиJSON;

КонецФункции

#Область ДекодированиеДанных

#Область СлужебныеСтруктурыZip
Expand Down Expand Up @@ -1892,6 +1929,23 @@

КонецФункции

Функция ПолучитьПараметрыЗаписиJSONПоУмолчанию()

ПараметрыЗаписиJSONПоУмолчанию = Новый Структура;
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ПереносСтрок", ПереносСтрокJSON.Авто);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("СимволыОтступа", " ");
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ИспользоватьДвойныеКавычки", Истина);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранированиеСимволов", ЭкранированиеСимволовJSON.Нет);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьУгловыеСкобки", Ложь);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьРазделителиСтрок", Истина);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьАмперсанд", Ложь);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьОдинарныеКавычки", Ложь);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьСлеш", Ложь);

Возврат ПараметрыЗаписиJSONПоУмолчанию;

КонецФункции

#КонецОбласти

#КонецОбласти
18 changes: 9 additions & 9 deletions src/ConfigDumpInfo.xml
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<ConfigDumpInfo xmlns="http://v8.1c.ru/8.3/xcf/dumpinfo" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" format="Hierarchical" version="2.8">
<ConfigVersions>
<Metadata name="CommonModule.КоннекторHTTP" id="b410e6fc-2af6-4b78-8dde-12f5e259926c" configVersion="b708ff2e9e27e4469f600736cf31869000000000"/>
<Metadata name="CommonModule.КоннекторHTTP.Module" id="b410e6fc-2af6-4b78-8dde-12f5e259926c.0" configVersion="66f8df6cc2afae4aac23b47d41313efc00000000"/>
<Metadata name="Configuration.Конфигурация" id="5eb9462b-b393-47be-933f-eee461b0776c" configVersion="75029b7659798547847351fc8e16754300000000"/>
<Metadata name="Configuration.Конфигурация.HomePageWorkArea" id="d50a38bd-46a7-49df-b1c1-97a268165f22.8" configVersion="eb8184ae7b7a1b4c9dd29361693acfae00000000"/>
<Metadata name="DataProcessor.Тесты" id="9f97ab24-5fa8-4904-97a8-ba436e571008" configVersion="c1daf971daea464d80058c3ca8c9475000000000">
<Metadata name="CommonModule.КоннекторHTTP" id="b410e6fc-2af6-4b78-8dde-12f5e259926c" configVersion="13ee538b7414cb4084e4215aa12993cd00000000"/>
<Metadata name="CommonModule.КоннекторHTTP.Module" id="b410e6fc-2af6-4b78-8dde-12f5e259926c.0" configVersion="6c7bd7db18540741bc87fadb27b61ff800000000"/>
<Metadata name="Configuration.Конфигурация" id="5eb9462b-b393-47be-933f-eee461b0776c" configVersion="852401691a96da41bcd813cd0883515e00000000"/>
<Metadata name="Configuration.Конфигурация.HomePageWorkArea" id="d50a38bd-46a7-49df-b1c1-97a268165f22.8" configVersion="ea06656328870d4bbcdfa2a28309c7f400000000"/>
<Metadata name="DataProcessor.Тесты" id="9f97ab24-5fa8-4904-97a8-ba436e571008" configVersion="9fb87e298a95444e8428cd01f8062e3600000000">
<Metadata name="DataProcessor.Тесты.Attribute.Логин" id="7fe8f06e-8b91-43a8-9ee0-74b68566215a"/>
<Metadata name="DataProcessor.Тесты.Attribute.ТестироватьСоединениеЧерезПрокси" id="913b491d-b727-4b54-97ed-92de17157c7b"/>
<Metadata name="DataProcessor.Тесты.Attribute.Пароль" id="b0718c92-e40b-4c48-8df9-3903401419b3"/>
</Metadata>
<Metadata name="DataProcessor.Тесты.Form.Форма" id="16f1d17a-2ee6-412e-8eb7-aaa7d4ff8526" configVersion="33e3e7d247158a4dbbf8df43f4084e5800000000"/>
<Metadata name="DataProcessor.Тесты.Form.Форма.Form" id="16f1d17a-2ee6-412e-8eb7-aaa7d4ff8526.0" configVersion="0c63248d40aa4746a41a19128346541c00000000"/>
<Metadata name="DataProcessor.Тесты.ObjectModule" id="9f97ab24-5fa8-4904-97a8-ba436e571008.0" configVersion="6f2be30e8073b74992707ae933bc55fb00000000"/>
<Metadata name="Language.Русский" id="f58d5f4e-e29f-439e-ae9f-58b2015e0061" configVersion="a862de1788f51f48a794f213525c641100000000"/>
<Metadata name="DataProcessor.Тесты.Form.Форма" id="16f1d17a-2ee6-412e-8eb7-aaa7d4ff8526" configVersion="856c560e47c954448c8869857165dcea00000000"/>
<Metadata name="DataProcessor.Тесты.Form.Форма.Form" id="16f1d17a-2ee6-412e-8eb7-aaa7d4ff8526.0" configVersion="0130790045541b47b587bbe682008e7700000000"/>
<Metadata name="DataProcessor.Тесты.ObjectModule" id="9f97ab24-5fa8-4904-97a8-ba436e571008.0" configVersion="2465c1440dc13945ac3d1cb90cc9dc7d00000000"/>
<Metadata name="Language.Русский" id="f58d5f4e-e29f-439e-ae9f-58b2015e0061" configVersion="b2b8d556b7e4ba4ca8d524667acbdedd00000000"/>
</ConfigVersions>
</ConfigDumpInfo>
14 changes: 14 additions & 0 deletions src/DataProcessors/Тесты/Ext/ObjectModule.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Если ТестироватьСоединениеЧерезПрокси Тогда
Тест_СоединениеЧерезПрокси();
КонецЕсли;
Тест_ПараметрыЗаписиJson();
Тест_URLБезСхемы();
Тест_ПередачаПараметровВСтрокуЗапроса();
Тест_ПередачаПараметровВСтрокуЗапросаКомбинированный();
Expand Down Expand Up @@ -53,6 +54,19 @@

КонецПроцедуры

Процедура Тест_ПараметрыЗаписиJson()

ПараметрыЗаписиJSON = Новый Структура("ПереносСтрок", ПереносСтрокJSON.Нет);
Json = Новый Структура;
Json.Вставить("field", "value");
Json.Вставить("field2", "value2");
Результат = КоннекторHTTP.PostJson("http://httpbin.org/anything", Json, Новый Структура("ПараметрыЗаписиJSON", ПараметрыЗаписиJSON));
УтверждениеВерно(Результат["data"], "{""field"":""value"",""field2"":""value2""}");

ТестПройден("Тест_ПараметрыЗаписиJson");

КонецПроцедуры

Процедура Тест_URLБезСхемы()

Результат = КоннекторHTTP.GetJson("httpbin.org/get");
Expand Down

0 comments on commit 6959534

Please sign in to comment.