POST
Запрос axios обращается к URL на контроллере, но устанавливает нулевые значения для моего класса POJO. Когда я беру инструменты разработчика в chrome, полезная нагрузка содержит данные. Что я делаю не так?
Axios POST Запрос:
var body = {
userName: 'Fred',
userEmail: 'Flintstone@gmail.com'
}
axios({
method: 'post',
url: '/addUser',
data: body
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
Ответ браузера:
Если я установлю заголовки как:
headers:{
Content-Type:'multipart/form-data'
}
Запрос выдает ошибку
Ошибка в публикации multipart / form-data. В заголовке Content-Type отсутствует граница
Если я делаю тот же запрос в почтальоне, он работает нормально и устанавливает значения для моего класса POJO.
Может кто-нибудь объяснить, как установить границу или как я могу отправить данные формы с помощью Axios.
источник
set
не работает{ method: 'post', url: 'myurl', data: bodyFormData, headers: {'Content-Type': 'multipart/form-data' } }
Проверьте строку запроса .
Вы можете использовать его следующим образом:
источник
В моем случае мне пришлось добавить границу к заголовку, как показано ниже:
Это решение также полезно, если вы работаете с React Native.
источник
FormData._boundary
не определено в Chrome 76 и Firefox 67, и axios удаляет заголовок Content-Type в любом случае , так что это не должно иметь никакого эффекта.Загрузить (несколько) двоичных файлов
Node.js
Ситуация усложняется, когда вы хотите разместить файлы через
multipart/form-data
, особенно несколько бинарных файлов. Ниже приведен рабочий пример:headers: {'Content-Type': 'multipart/form-data' }
не предпочитаюheaders: formData.getHeaders()
async
иawait
выше, вы можете изменить их на простые заявления Promise, если они вам не нравятсяНедавно добавленный контент ниже:
браузер
Браузер
FormData
отличается от пакета NPM «form-data». У меня в браузере работает следующий код:HTML:
JavaScript:
источник
concat-stream
,async
иawait
) для многократной загрузки файлов с помощьюfor(var x = 0; x<this.state.files.length; x++) { formData.append('files[]', this.state.files[x]) }
так что я могу представить , используяaxios.post(url, formData, config)
Еще проще:
источник
Использование формата application / x-www-form-urlencoded в axios
браузер
В браузере вы можете использовать API URLSearchParams следующим образом:
Обратите внимание, что URLSearchParams поддерживается не всеми браузерами (см. Caniuse.com), но есть доступное многозаполнение (убедитесь, что оно заполнено в глобальной среде).
Кроме того, вы можете кодировать данные, используя библиотеку qs:
Или по-другому (ES6),
источник
2020 ES6 способ сделать
Имея форму в HTML, я связал данные следующим образом:
ДАННЫЕ:
onSubmit:
источник
Вышеупомянутый метод работал для меня, но так как это было то, что мне часто требовалось, я использовал базовый метод для плоских объектов. Обратите внимание, я также использовал Vue, а не REACT
Это работало на меня, пока я не столкнулся с более сложными структурами данных с вложенными объектами и файлами, которые затем позволяют
источник
objectToFormData
кpackageData
или наоборотисточник