Невозможно проанализировать тип в запросе данных формы в Java - PullRequest
0 голосов
/ 10 октября 2019

При получении HTTP-запроса на мой загрузочный контроллер Spring с устройства Android у меня возникают проблемы при разборе объектов Typed в данных формы.

Мне нужно отправить многокомпонентный запрос с несколькими файлами и некоторымиданные, поэтому я решил использовать форму-данные для этого.

Теперь, поскольку данные, отправляемые вместе с файлами, являются примитивами, я могу анализировать их в своем контроллере, но если я пытаюсь отправить тип (например, List или просто Animal.class), я получаю исключение, сообщающее что-тоНапример:

Mismatched parameters; can't parse to string

Разве невозможно отправить сложные объекты в данных формы. Как я могу решить вышеуказанную проблему.

1 Ответ

0 голосов
/ 10 октября 2019

Я знаю, что это не прямой ответ, но это гораздо лучшее решение. Вы должны сжать все ваши данные в байтовый массив с заданным форматом. Сериализация занимает много времени, и если вы знаете данные, которые вы отправляете, вам не нужно использовать такой неопределенный алгоритм, который занимает больше времени по сравнению с тем, чтобы выполнить сериализацию самостоятельно. На самом деле я не знаю, какие данные вы отправляете в классе Animal, но допустим, что вы отправляете вид (строковую переменную), возраст и логическое значение, представляющее, является ли животное полностью выращенным или нет.

class Animal {
    /* Fields and Constructors here */

    public static byte[] toByteArray(Animal a) {
        byte[] arr = new byte[a.name.length() + 4 /*(length of array)*/ + 4 /*(the age)*/ + 1 /*(fully-grown)*/];

        arr[0] = a.name.length() >> 24 & 0xff;
        arr[1] = a.name.length() >> 16 & 0xff;
        arr[2] = a.name.length() >> 8 & 0xff;
        arr[3] = a.name.length() & 0xff;

        for (int i = 0; i < a.name.length(); i++) {
            arr[i + 4] = a.name.charAt(i);
        }

        arr[a.name.length() + 4] = a.age >> 24 & 0xff;
        arr[a.name.length() + 5] = a.age >> 16 & 0xff;
        arr[a.name.length() + 6] = a.age >> 8 & 0xff;
        arr[a.name.length() + 7] = a.age & 0xff;

        arr[a.name.length() + 8] = a.grown? 0x1 : 0x0;
    }
}

То же самое можно сделать для десериализации, но в обратном порядке. Я не знаю, забыл ли я некоторые броски, но я уверен, что вы можете понять это :)

...