POST вложил html данные формы как многоуровневые json в несколько таблиц БД в java REST сервисе - PullRequest
0 голосов
/ 02 февраля 2020

Я ищу хороший учебник или любую подсказку, которая ответила бы на этот простой вопрос. Поскольку все учебники, кажется, показывают только примеры «простых решений», они, очевидно, не для меня.

У меня есть многомерная вложенная форма html, в которой следует размещать данные в основной таблице и связанные данные в связанных таблицах (и связанные с ними данные, если применимо).

Я знаю, как это сделать, используя php. Но если это java REST сервис? Тогда тело запроса POST должно быть в формате json, верно? И данные формы должны быть преобразованы в json с использованием javascript?

Мой пример формы:

<form id="main" method="post" action="">
    <input type="hidden" name="id">
    <input type="text" name="name" value="main name">
    <input type="hidden" name="location[0][id]">
    <input type="hidden" name="location[0][main_id]" value=":main.id">
    <input type="text" name="location[0][name]" value="locname value">
    <input type="hidden" name="collection[0][id]">
    <input type="hidden" name="collection[0][main_id]" value=":main.id">
    <input type="text" name="collection[0][heading]" value="heading value">
    <input type="hidden" name="collection[0][items][0][id]">
    <input type="hidden" name="collection[0][items][0][collection_id]" value=":collection.id">
    <input type="text" name="collection[0][items][0][title]" value="level 3 title">
    <input type="text" name="collection[0][items][0][year]" value="2020">
    <textarea name="collection[0][items][0][description]">0202</textarea>
    <input type="hidden" name="collection[0][items][1][id]">
    <input type="hidden" name="collection[0][items][1][collection_id]" value=":collection.id">
    <input type="text" name="collection[0][items][1][title]" value="another title">
    <input type="text" name="collection[0][items][1][year]" value="2019">
    <textarea name="collection[0][items][1][description]">another description</textarea>
    <input type="hidden" name="collection[1][id]">
    <input type="hidden" name="collection[1][main_id]" value=":main.id">
    <input type="text" name="collection[1][heading]" value="another heading">
  <input type="submit" value="Submit">
</form>

PHP преобразует такие данные формы с такими входными именами, как таблица [0] [othertable] [1] [field], в многоуровневый массив $ _POST, но как javascript может создать необходимое тело запроса POST в формате json, как в следующем примере?

Примечание: данные типа ": main.id" или " : collection.id "в следующем примере означает значение pk родительских данных.

{
    "id":":id",
    "name":"main name",
    "location":
    [
        {
            "id":":id",
            "main_id":":main.id",
            "name":"locname value"
        }
    ],
    "collection":
    [
        {
            "id":":id",
            "main_id":":main.id",
            "heading":"heading value",
            "items":
            [
                {
                    "id":":id",
                    "collection_id":":collection.id",
                    "title":"level 3 title",
                    "year":"2020",
                    "description":"0202"
                },
                {
                    "id":":id",
                    "collection_id":":collection.id",
                    "title":"another title",
                    "year":"2019",
                    "description":"another description"
                },
            ]
        },
        {
            "id":":id",
            "main_id":":main.id",
            "heading":"another heading",
            "items":[]
        }
    ]
}

Что мне потребуется затем сделать с кодом java, чтобы сгенерировать все необходимые INSERT INTO в этом единственном элементе пост, это наверное отдельная тема. В любом случае, конечная цель:

INSERT INTO main (name) VALUES ('main name');
SET @mainId = LAST_INSERT_ID();
INSERT INTO location (main_id, name) VALUES (@mainId, 'locname value');
INSERT INTO collection (main_id, heading) VALUES (@mainId, 'heading value');
SET @collectionId = LAST_INSERT_ID();
INSERT INTO items (collection_id, title, year, description) VALUES (@collectionId, 'level 3 title', '2020', '0202');
INSERT INTO items (collection_id, title, year, description) VALUES (@collectionId, 'level 3 title', '2020', '0202');
INSERT INTO items (collection_id, title, year, description) VALUES (@collectionId, 'another title', '2019', 'another description');
INSERT INTO collection (main_id, heading) VALUES (@mainId, 'another heading');
SET @collectionId = LAST_INSERT_ID();

Заранее большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...