2016-07-27 7 views
1

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

[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: [email protected]; 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: [email protected]; 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 sending form data and a json object in an ajax call и я пытаюсь таким же образом.

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

ответ

0

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

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

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

request.getParameter("jsonObjectData"); 

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

How to parse a JSON string to an array using Jackson.

0

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

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) { 
    } 

});

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

0

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

var formData = $('#client-form').serialize(); 
$.ajax({ 
    url: 'www.xyz.com/index.php?' + formData, 
    type: 'POST', 
    data:{ 
    }, 
    success: function(data){}, 
    error: function(data){}, 
}) 
+0

lol. Это не то, что я хотел. Как это отвечает на мой вопрос и где находятся данные json в вашем ответе? – Lucky

+0

В разделе данных вы можете передать объект json со ссылкой, а данные формы добавляются в разделе URL. Например, данные: {jsonObject: JsonObject }, – Jack

+0

Вы неправильно поняли мой вопрос. Мне нужно отправить оба объекта json и formData вместе. Ваш ответ подразумевает, что вы отправляете только один из них. – Lucky

Смежные вопросы