Я пишу скрипт на Python для автоматического обновления структур на моем портале Liferay, и я хочу сделать это с помощью JSON REST API.
Я делаю запрос на получение структуры (метод getStructure), и это сработало.
Но когда я пытаюсь выполнить обновление структуры на портале, появляется следующая ошибка:
ValueError: Content-Length should be specified for iterable data <br/>of type class 'dict' {'serviceContext': "{'prueba'}", 'serviceClassName': <br/>'com.liferay.portlet.journal.service.JournalStructureServiceUtil', 'name': 'FOO', <br/>'xsd': '... THE XSD OBTAINED VIA JSON ...', 'serviceParameters': <br/>'[groupId,structureId,parentStructureId,name,description,xsd,serviceContext]', <br/>'description': 'FOO Structure', 'serviceMethodName': 'updateStructure', <br/>'groupId': '10133'}
То, что я делаю, следующее:
urllib.request.Request(url = URL, data = data_update, headers = headers)
URL-адрес http://localhost:8080/tunnel-web/secure/json
Заголовки настроены с базовой аутентификацией (это работает, это проверено методом getStructure ).
Данные:
data_update = {<br/> "serviceClassName" : "com.liferay.portlet.journal.service.JournalStructureServiceUtil", <br/> "serviceMethodName" : "updateStructure", <br/> "serviceParameters" : "[groupId,structureId,parentStructureId,name,description,xsd,serviceContext]", <br/> "groupId" : 10133, <br/> "name" : FOO, <br/> "description" : FOO Structure, <br/> "xsd" : ... THE XSD OBTAINED VIA JSON ..., <br/> "serviceContext" : "{}" }
Кто-нибудь знает решение? Должен ли я указать длину словаря и как? Или это ошибка?