Изображение Spring, значения форм и список объектов в FormData - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть конечная точка RestController:

Mono<A> editA(@PathVariable String id, @Valid A a)

Класс A выглядит так:

class A {
  private MultipartFile imageToSave;
  private String name;
  private String otherString;
  private ArrayList<B> bList;
}

Класс B похож на класс A (но содержит только строковые поля).

Клиент веб-интерфейса (React with Axios) отправляет значения формы (две строки, файл изображения).Я использую javascript объект FormData для отправки этих значений в один запрос, и он работал нормально.

Но я также хочу отправить список B. Объект.Поэтому я попытался просто добавить список объектов B в FormData и отправить его.

Как я могу отправить список с объектом, используя FormData, и они сопоставили его с ArrayList?

Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 ошибки Ошибка поля в объекте 'a' в поле 'bList': отклоненное значение [[объект объекта]];коды [typeMismatch.a.bList, typeMismatch.bList, typeMismatch.java.util.ArrayList, typeMismatch];аргументы [org.springframework.context.support.DefaultMessageSourceResolvable: codes [a.bList, bList];аргументы [];сообщение по умолчанию [bList]];сообщение по умолчанию [Не удалось преобразовать значение свойства типа 'java.lang.String' в требуемый тип 'java.util.ArrayList' для свойства 'bList';вложенное исключение - java.lang.IllegalStateException: невозможно преобразовать значение типа «java.lang.String» в требуемый тип «java.util.ArrayList» для свойства «bList»: не найдено подходящих редакторов или стратегии преобразования]]

1 Ответ

0 голосов
/ 30 ноября 2018

У меня была похожая ошибка при передаче ошибки с использованием formData в laravel.Оказывается, вы не можете использовать API-интерфейс formData с массивами.Посмотрите на следующий URL: https://developer.mozilla.org/en-US/docs/Web/API/FormData/append Он принимает только строку или BLOB-объект.Для вашего решения вам понадобится что-то вроде того, что я сделал.

  let formData = {};
            for (var property in this.form) {
                if (this.form.hasOwnProperty(property)) {
                      //  formData.append(property,this.form[property]);
                        formData[property] = this.form[property];

                }
            }

Здесь я по сути просто строю объект из свойств ввода форм и затем использую приведенный ниже код, проходящий через аксиосы.

axios({
                    method: 'post',
                    url: url
                    data : formData,
                    headers:{
                        'Content-Type': 'application/json',
                    }
                }).then((response) => { ... });
...