Как передать объект FormData и JSON в ajax в контроллер Spring MVC?

Мне нужно передать объект FormData и JSON в вызове ajax, но я получаю ошибку 400 Bad Request.

[artifact:mvn]  org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unexpected character ('-' (code 45)) in numeric value: expected digit (0-9) to follow minus sign, for valid numeric value
[artifact:mvn]  at [Source: java.io.PushbackInputStream@3c0d58f6; line: 1, column: 3]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('-' (code 45)) in numeric value: expected digit (0-9) to follow minus sign, for valid numeric value
[artifact:mvn]  at [Source: java.io.PushbackInputStream@3c0d58f6; line: 1, column: 3]

JS:

var formData = new FormData(form[0]);
//form JSON object
var jsonData = JSON.stringify(jcArray);
$.ajax({
        type: "POST",
        url: postDataUrl,
        data: { formData:formData,jsonData:jsonData },
        processData: false,
        contentType: false,
        async: false,
        cache: false,
        headers: { 
            'Accept': 'application/json',
            'Content-Type': 'application/json' 
        },
        success: function(data, textStatus, jqXHR) {
        }
});

Контроллер:

@RequestMapping(value="/processSaveItem",method = RequestMethod.POST")
public @ResponseBody Map<String,String> processSaveItem(
                                  @RequestBody XYZClass result[])

}

Есть аналогичный вопрос: jquery отправляет данные формы и объект json в вызове ajax, и я пытаюсь сделать то же самое.

Как я могу отправить объект FormData и JSON в одном запросе ajax?


person Lucky    schedule 27.07.2016    source источник


Ответы (3)


Вы можете пройти таким образом

   postdata={};
   postdata.formData=formData;
   postData.jsonData=jsonData
 $.ajax({
    type: "POST",
    url: postDataUrl,
    data: { postdata},
    processData: false,
    contentType: false,
    async: false,
    cache: false,
    headers: { 
        'Accept': 'application/json',
        'Content-Type': 'application/json' 
    },
    success: function(data, textStatus, jqXHR) {
    }

});

и на стороне контроллера вы можете идентифицировать данные.

person pankaj    schedule 27.07.2016

Вы можете сделать следующее, чтобы передать данные формы в вызове Ajax.

var formData = $('#client-form').serialize();
$.ajax({
    url: 'www.xyz.com/index.php?' + formData,
    type: 'POST',
    data:{
    },
    success: function(data){},
    error: function(data){},
})
person Bhushan    schedule 10.05.2017
comment
ржунимагу. Это не то, чего я хотел. Как это отвечает на мой вопрос и где данные json в вашем ответе? - person Lucky; 10.05.2017
comment
В разделе данных вы можете передать объект json со ссылкой, а данные формы добавляются в раздел URL. Например, данные: {jsonObject: JsonObject}, - person Bhushan; 11.05.2017
comment
Вы не правильно поняли мой вопрос. Мне нужно отправить объект json и formData вместе. Ваш ответ подразумевает, что вы отправляете только один из них. - person Lucky; 22.05.2017
comment
Здесь я также отправляю данные своей формы. Я передаю данные формы в URL. - person Bhushan; 02.06.2017

Я решил это, добавив строку JSON с объектом FormData в ajax POST.

var jsonObjectData = JSON.stringify(jcArray);
formData.append("jsonObjectData",jsonObjectData);

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

request.getParameter("jsonObjectData");

и теперь у вас будет Stringified JSON, и вы сможете разобрать объект json на Java

Как преобразовать строку JSON в массив, используя Джексон.

person Lucky    schedule 28.07.2016