Как получить переменные в Spring MVC после JavaScript .Fetch()

248
14 мая 2017, 22:59

На фронте работал метод $.ajax() и было все хорошо. Переписал на .fetch() и контроллер перестал видеть переменные. На фронте отправляю запрос так:

    let data = new FormData();
    data.append('myVar', 'test');
    fetch('${pageContext.request.contextPath}/page', {
        method: 'POST',
        body: data
    })
        .then(function(response) { return response.json(); })
        .then(function(json) {/* some acts*/});

Обрабатываю запрос так:

@RequestMapping(value = "/page", method = RequestMethod.POST)
protected ResponseEntity myMethod(
        @RequestParam(value = "myVar") String str
) {
    /*Some acts*/
}

в str приходит null. Куда копать?

Answer 1

Проблема в том, что @RequestParam ловит переменные из application/x-www-form-urlencoded. А FormData multipart/form-data. Переписал отправку на фронте:

 fetch('${pageContext.request.contextPath}/page', {
        method: 'POST',
        headers: {'Content-Type':'application/x-www-form-urlencoded'},
        body: `myVar=myVal`
    })

и полетело

READ ALSO
Как сделать что бы не вылетало?

Как сделать что бы не вылетало?

Написал простое приложение Ехо звукаПроблема в том что при переходе в другие приложения звук отключается

304
Partition problem

Partition problem

Приветствую всех! Есть такая задача: вводится n чисел (1 < n < 1000 , у вводимых чисел тот же диапазон)Нужно разбить числа на два массива с минимальной...

239
ExceptionInInitializerException при вызове Jsoup.connect().get();

ExceptionInInitializerException при вызове Jsoup.connect().get();

Использовал Jsoup в андроид приложениях, все работало нормальноТот же самый jsoup

251
Эмуляция SystemClock.uptimeMillis

Эмуляция SystemClock.uptimeMillis

Как эмулировать на Java эту функцию из Android

219