Отправка POST-запроса из приложения React с массивом файлов, полученная в виде массива строк в Spring API - PullRequest
0 голосов
/ 07 января 2019

Я использую Reaction-Dropzone для массовой загрузки изображений в мой бэкэнд. В документации сказано, что функция onChange возвращает массив файлов. Я сохраняю этот массив файлов в свой объект состояния. https://www.npmjs.com/package/material-ui-dropzone

Объект, который я передаю, имеет вид

this.state = {
  title: '',
  description: '',
  pictures: []
};

Мой вызов извлечения на мой бэкэнд выглядит так

createProject = () =>  {
  let formData = new FormData();
  formData.append('title', this.state.title);
  formData.append('description', this.state.description);
  formData.append('pictures', this.state.pictures);
  fetch("http://localhost:5000/api/project/uploadProject", 
  {
    mode: 'no-cors',
    method: "POST",
    body: formData
  }).then(function (res) {
    if (res.ok) {
      alert("Perfect! ");
    } else if (res.status == 401) {
      alert("Oops! ");
    }
  }, function (e) {
    alert("Error submitting form!");
  });
}

Конечная точка моего бэкэнда, построенного на Spring, имеет вид

@RequestMapping(path = "/uploadProject", method = RequestMethod.POST,
        consumes = {"multipart/form-data"})
public void uploadFile( @ModelAttribute ProjectRequest projectRequest) {

И, наконец, моя модель ProjectRequest выглядит как

public class ProjectRequest {
@NotBlank
@Size(max = 140)
private String title;

@NotBlank
private String description;

@Size(max = 4)
private List<MultipartFile> pictures;

Когда я запускаю вызов fetch, я продолжаю получать эту ошибку от Spring, говоря, что я передаю массив строк, и он не может быть преобразован в массив MultipartFile

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

Я попытался жестко закодировать массив строк в поле рисунков и настроить список изображений модели projectRequest так, чтобы он принимал список строк, чтобы проверить, правильно ли я написал конечную точку бэкэнда, но это проходит нормально. По какой-то причине он не работает, только когда у меня есть массив файлов в параметре pictures.

Кто-нибудь знает, почему эта ошибка повторяется?

UPDATE: Таким образом, я нашел точную проблему, которую я имею по этой ссылке Объект файла становится строкой, когда помещается в массив? JS

Кто-нибудь знает, как можно обойтись массивом строк [объектный файл]?

...