Ajax를 사용하여 Jquery에서 Spring 컨트롤러로 Multipart 파일을 보낼 수 없습니다.

Ramsad

jquery에서 Spring 컨트롤러로 Multipart 파일을 보내려고합니다.

다음은 내가 얻는 오류입니다.

WARN : org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Handler execution resulted in exception: org.springframework.validation.BeanPropertyBindingResult: 1 errors
           Field error in object 'addressDTO' on field 'addrDocImage': rejected value [590768c44b1291493657796.png]; codes [typeMismatch.addressDTO.addrDocImage,typeMismatch.addrDocImage,typeMismatch.org.springframework.web.multipart.MultipartFile,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [addressDTO.addrDocImage,addrDocImage]; arguments []; default message [addrDocImage]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.web.multipart.MultipartFile' for property 'addrDocImage'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.MultipartFile] for property 'addrDocImage': no matching editors or conversion strategy found]

다음은 UI 코드입니다.

    <div class="form-group"> 
                <form:input type="file" id="addrDocImage" path="addrDocImage" name="addrDocImage"/>

    </div>

Ajax 호출을 통해 보내고 있습니다.

   submitHandler: function(form) {
    var addressType=$("#addressType option:selected").text();
    var country=$("#country option:selected").text();
    var region=$("#region option:selected").text();
    var city=$("#city option:selected").text();
    var addrDocImage=$("#addrDocImage option:selected").text();

    var formData= new FormData();

    var length = document.getElementById('addrDocImage').files.length;
    if(length==0){
        alert("No File Choosen");
        return true;
    }
    if(document.getElementsByName('documentTypeId')[0].value == 0){
        alert(document.getElementsByName('documentTypeId')[0].value);
        alert("Please choose Document Type");
        return true;
    }
     for (var i = 0; i < length; i++) {
        var file=document.getElementById('addrDocImage').files[i];
        var fileName = file.name;
        var fileExtension = fileName.split('.')[fileName.split('.').length - 1].toLowerCase();
        if(fileExtension == "pdf" || fileExtension == "jpeg" || fileExtension == "jpg" || fileExtension == "bmp" || fileExtension == "png" || fileExtension == "gif"){
            formData.append("file", file);
        }else{
            alert("Please upload document of type image or pdf ");
            return true;
        }
     }


    $.ajax({
        url: form.action,
        type: form.method,
        data: $(form).serialize()+formData,
        beforeSend: function(xhr){
            xhr.setRequestHeader('X-CSRF-Token', $("meta[name='_csrf']").attr("content"));
        },
        success: function(response) {
            $('#merchantAddressCreationForm').modal('hide');
            //$('#merchantAddressCreationForm').modal('toggle');
         swal({
             title: "",
             text: response,
         }, function() {
               $.ajax({
                    type: 'GET',
                    url: 'addressDetails',
                    data : "_csrf="+$("meta[name='_csrf']").attr("content"),
                    success:function(data){
                        $(".merchant_address_data").html(data);
                    },
                    error:function(response){
                    }
                });
         }); 
        }            
    });
}

내 DTO는

 public class AddressDTO implements Serializable {

 private static final long serialVersionUID = 2931368070275666084L;
 private long addrId;
 private long partyId;
 private String locationName;
 private MultipartFile addrDocImage;
 ''''''
 }

내 컨트롤러 코드는

    @RequestMapping(value="/createMerchantAddress", method = RequestMethod.POST )
     public @ResponseBody String createMerchantAddress(@ModelAttribute("addressDTO") AddressDTO addressDTO,@AuthenticationPrincipal PNSolUser loggedUser){
addressDTO.setPartyId(loggedUser.getPartyId());
addressDTO.setCreatedBy(loggedUser.getUserId());
addressDTO.setCreatedDate(Calendar.getInstance().getTime());

오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

판 카이 마크와 나

아래 코드를 시도하고 ajax 코드를 약간 변경하십시오. 코드에 아래 매개 변수를 추가하십시오.

processData : false,
contentType : false,

그리고 var formData = new FormData ($ ( "# formID") [0]); ajax가 시작되기 전에 줄.

또는 아래 코드를 확인하고 코드에 따라 변경하십시오.

var formData = new FormData($(form)[0]);
$.ajax({
    url: form.action,
    type: form.method,
    data: formData,
    processData: false,
    contentType: false,
    beforeSend: function (xhr) {
        xhr.setRequestHeader('X-CSRF-Token', $("meta[name='_csrf']").attr("content"));
    },
    success: function (response) {
        $('#merchantAddressCreationForm').modal('hide');
        //$('#merchantAddressCreationForm').modal('toggle');
        swal({
            title: "",
            text: response,
        }, function () {
            $.ajax({
                type: 'GET',
                url: 'addressDetails',
                data: "_csrf=" + $("meta[name='_csrf']").attr("content"),
                success: function (data) {
                    $(".merchant_address_data").html(data);
                },
                error: function (response) {
                }
            });
        });
    }
});

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

js를 사용하여 asp.net mvc의 컨트롤러에 파일 값을 보낼 수 없습니다.

분류에서Dev

Rails 컨트롤러를 사용하여 Heroku에서 파일을 다운로드 할 수 없습니다.

분류에서Dev

ajax를 사용하여 값 속성을 서버에 보낼 수 없습니다.

분류에서Dev

내 컨트롤러에 AJAX 요청을 보낼 수 없습니다.

분류에서Dev

AJAX를 사용하여 PHP 문자열에 값을 보낼 수 없습니다.

분류에서Dev

nodemailer를 사용하여 nodejs에서 이메일을 보낼 수 없습니다.

분류에서Dev

Spring의 JmsTemplate을 사용하여 JMS 메시지를 activemq Queue에 보낼 수 없습니다.

분류에서Dev

jQuery Ajax는 MVC 컨트롤러에 개체 목록을 보낼 수 없습니다.

분류에서Dev

GoDaddy 서버를 사용하여 laravel 푸시 알림을 iOS 모바일로 보낼 수 없습니다.

분류에서Dev

javax를 사용하여 Android에서 Gmail 계정을 사용하여 이메일을 보낼 수 없습니다.

분류에서Dev

버튼을 사용하여 한보기 컨트롤러에서 다른보기 컨트롤러로 이동할 수 없습니다.

분류에서Dev

Retrofit을 사용하여 Multipart를 통해 String []을 보낼 수 있습니까?

분류에서Dev

outputStreamWriter ()를 사용하여 앱에서 서블릿으로 문자열을 보낼 수 없습니다.

분류에서Dev

Django를 사용하여 GCM에서 POST 요청을 보낼 수 없습니다.

분류에서Dev

angularjs 및 ionic을 사용하여 컨트롤러에서 뷰로 데이터를 가져올 수 없습니다.

분류에서Dev

Rails / Devise : 컨트롤러에서 수동으로 확인 메일을 보낼 수 없습니다.

분류에서Dev

컨트롤러에서 MVC의보기로 목록 전달-foreach를 사용하여 문자열을 가져올 수 없습니다.

분류에서Dev

Google Script를 사용하여 Gmail로 Excel 첨부 파일을 보낼 수 없습니다.

분류에서Dev

세션을 사용하지 않고 Asp.net MVC 컨트롤러에서 Asp.Net WebForm으로 개체를 어떻게 보낼 수 있습니까?

분류에서Dev

POST 메서드를 사용하여 컨트롤러에 데이터를 보낼 수 없음 Symfony3

분류에서Dev

PHPmailer를 사용하여 첨부 파일을 보낼 수 없습니다.

분류에서Dev

ViewBag를 컨트롤러에서 MVC의 다른 컨트롤러로 보낼 수 있습니까?

분류에서Dev

React-index.js에서 여러 파일을 내보낼 수 없습니다.

분류에서Dev

PHP를 사용하여 iOS에 푸시 알림을 보낼 수 없습니다.

분류에서Dev

Multipart를 사용하여 이미지를 업로드하고 multipart 객체를 Spring MVC 컨트롤러에 매개 변수로 게시

분류에서Dev

GCM을 사용하여 Android로 푸시를 보낼 수 없습니다.

분류에서Dev

Outlet 속성을 사용하여 한 컨트롤러에서 다른 컨트롤러로 Segue를 전달할 수 없습니까?

분류에서Dev

보기에서 컨트롤러 작업 .NET MVC로 데이터를 보낼 수 없습니다.

분류에서Dev

ajax로 스프링 컨트롤러에서 체크 박스 값을 어떻게 보낼 수 있습니까?

Related 관련 기사

  1. 1

    js를 사용하여 asp.net mvc의 컨트롤러에 파일 값을 보낼 수 없습니다.

  2. 2

    Rails 컨트롤러를 사용하여 Heroku에서 파일을 다운로드 할 수 없습니다.

  3. 3

    ajax를 사용하여 값 속성을 서버에 보낼 수 없습니다.

  4. 4

    내 컨트롤러에 AJAX 요청을 보낼 수 없습니다.

  5. 5

    AJAX를 사용하여 PHP 문자열에 값을 보낼 수 없습니다.

  6. 6

    nodemailer를 사용하여 nodejs에서 이메일을 보낼 수 없습니다.

  7. 7

    Spring의 JmsTemplate을 사용하여 JMS 메시지를 activemq Queue에 보낼 수 없습니다.

  8. 8

    jQuery Ajax는 MVC 컨트롤러에 개체 목록을 보낼 수 없습니다.

  9. 9

    GoDaddy 서버를 사용하여 laravel 푸시 알림을 iOS 모바일로 보낼 수 없습니다.

  10. 10

    javax를 사용하여 Android에서 Gmail 계정을 사용하여 이메일을 보낼 수 없습니다.

  11. 11

    버튼을 사용하여 한보기 컨트롤러에서 다른보기 컨트롤러로 이동할 수 없습니다.

  12. 12

    Retrofit을 사용하여 Multipart를 통해 String []을 보낼 수 있습니까?

  13. 13

    outputStreamWriter ()를 사용하여 앱에서 서블릿으로 문자열을 보낼 수 없습니다.

  14. 14

    Django를 사용하여 GCM에서 POST 요청을 보낼 수 없습니다.

  15. 15

    angularjs 및 ionic을 사용하여 컨트롤러에서 뷰로 데이터를 가져올 수 없습니다.

  16. 16

    Rails / Devise : 컨트롤러에서 수동으로 확인 메일을 보낼 수 없습니다.

  17. 17

    컨트롤러에서 MVC의보기로 목록 전달-foreach를 사용하여 문자열을 가져올 수 없습니다.

  18. 18

    Google Script를 사용하여 Gmail로 Excel 첨부 파일을 보낼 수 없습니다.

  19. 19

    세션을 사용하지 않고 Asp.net MVC 컨트롤러에서 Asp.Net WebForm으로 개체를 어떻게 보낼 수 있습니까?

  20. 20

    POST 메서드를 사용하여 컨트롤러에 데이터를 보낼 수 없음 Symfony3

  21. 21

    PHPmailer를 사용하여 첨부 파일을 보낼 수 없습니다.

  22. 22

    ViewBag를 컨트롤러에서 MVC의 다른 컨트롤러로 보낼 수 있습니까?

  23. 23

    React-index.js에서 여러 파일을 내보낼 수 없습니다.

  24. 24

    PHP를 사용하여 iOS에 푸시 알림을 보낼 수 없습니다.

  25. 25

    Multipart를 사용하여 이미지를 업로드하고 multipart 객체를 Spring MVC 컨트롤러에 매개 변수로 게시

  26. 26

    GCM을 사용하여 Android로 푸시를 보낼 수 없습니다.

  27. 27

    Outlet 속성을 사용하여 한 컨트롤러에서 다른 컨트롤러로 Segue를 전달할 수 없습니까?

  28. 28

    보기에서 컨트롤러 작업 .NET MVC로 데이터를 보낼 수 없습니다.

  29. 29

    ajax로 스프링 컨트롤러에서 체크 박스 값을 어떻게 보낼 수 있습니까?

뜨겁다태그

보관