Составные данные формы: org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupported - PullRequest
0 голосов
/ 18 сентября 2018

Загрузка многочастного файла Spring MVC с использованием ajax.Я использую Spring Security, поэтому я также добавил токен CSRF.Я получаю следующую ошибку: org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupported WARNING: Request method 'POST' not supported

Форма ввода jsp:

<form id="fileUploadForm" enctype="multipart/form-data" method="POST">
    <input name="id" type="hidden" id="id" value="55" />
    <input type="file" class="custom-file-input" id="photo" name="photo" aria- 
    describedby="photoAddon">
    <input type="file" class="custom-file-input" id="sign" name="sign" aria- 
    describedby="signAddon">
    <input type="hidden" name="${_csrf.parameterName}"  value="${_csrf.token}" />

    <button type="button" class="btn btn-success" 
    onclick="profWrapper.uploadPhotoSign()">Upload</button>
</form>

Код Ajax:

uploadPhotoSign : function() {
            event.preventDefault();
             // Get form
            var form = $('#fileUploadForm')[0];

            // Create an FormData object 
            var formData = new FormData(form);
            $.ajax({
                type: "POST",
                enctype: 'multipart/form-data',
                url: "uploadPhotoSign",
                data: formData,
                processData: false, // prevent jQuery form transforming the data into a query string
                contentType: false,
                cache: false,
                timeout: 600000,
                succecc: function(data) {
                    console.log(data);
                },
                error: function(e) {
                    console.log(e.responseText);
                }
            });
        }

Контроллер:

@PostMapping("uploadPhotoSign")
    public ResponseEntity<String> savePhotoSign(HttpServletRequest request,
            @RequestParam MultipartFile photo,
            @RequestParam MultipartFile sign, 
            @RequestParam("id") int id){

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Несмотря на то, что в форме было скрытое поле ввода csrf, добавление токена csrf в заголовок запроса работало для меня следующим образом:

поле ввода:

<input type="hidden" name="${_csrf.parameterName}" id="csrfTkn" value="${_csrf.token}" />

Код Ajax:

   $.ajax({
        type: "POST",
        enctype: 'multipart/form-data',
        url: "uploadPhotoSign",
        data: formData,
        processData: false,
        contentType: false,
        headers: {'X-CSRF-Token': $('#csrfTkn').val()},
        success: function(data) {
        console.log(data);
        }
   });
0 голосов
/ 18 сентября 2018

Возможно, вам понадобится добавить заголовок csrf в заголовки вашего вызова ajax: {'X-CSRF-TOKEN': значение}

проверить составной проект здесь Но это только пример проекта

...