Сколько способов передать данные JSON контроллеру пружины?Как манипулировать данными JQuery AJAX JSON в контроллере весной MVC
Я последовал this tutorial, и они передают данные, используя следующий синтаксис:
data: "{\"name\":\"hmkcode\",\"id\":2}",
Это работает, но так как мне нужно, чтобы получить данные от пользователя с помощью ввода текста, я не знаю, как поставить мой переменная в этой строке.
Я пытался делать, используя следующий синтаксис:
data: "{\"name\":\name\}"
Но он возвращает следующую ошибку:
status: parsererror er:SyntaxError: Unexpected tokken a
Я видел другие сайты, которые используют следующий синтаксис:
data: {"name":name}
Но это дает мне ту же ошибку.
Это работает, но я не знаю, подходит ли наилучший подход.
var json = {"name" : name};
...
data: JSON.stringify(json),
мне удается передать строку JSON к одному из моих контроллеров, но я получаю строку, как это:
{"name": Joe, "lastname": Smith}
Есть ли способ, чтобы получить только что информация в Person объект или, по крайней мере, получить только Джо в цепочке и Смита в другом?
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<script type="text/javascript">
function doAjaxPost()
{
// get the form values
var name = $('#name').val();
var lastname = $('#lastname').val();
var json = {"name" : name, "lastname" : lastname};
//console.log(json);
$.ajax(
{
type: "POST",
url: "formShow",
data: JSON.stringify(json),
//data: "{\"name\":name}",
//data: {"name":name},
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
beforeSend: function(xhr)
{
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success: function(data)
{
//console.log(data);
console.log(data.name);
//var data = $.parseJSON(JSON.stringify(response));
//alert(data);
alert("name: "+data.name);
//$('#name').val('');
},
error:function(data,status,er) {
alert("error: "+data+" status: "+status+" er:"+er);
}
/* error: function (xhr, ajaxOptions, thrownError)
{
alert(xhr.status);
alert(xhr.responseText);
alert(thrownError);
}*/
});
}
</script>
<fieldset>
<legend>Name in view</legend>
Name in view: <input type="text" id="name" name="name">
<br>
Last Name in view: <input type="text" id="lastname" name="lastname">
<br>
Show modify name in view: <input type="text" id="modifyname" name=""modifyname"">
<br>
<input type="button" value="Add Users" onclick="doAjaxPost()">
</fieldset>
<br>
И это мои контроллеры:
@RequestMapping(value = "formShow", method = RequestMethod.GET)
public String formularioIncidencia (Model model) {
return "formShow";
}
@RequestMapping(value = "formShow", method = RequestMethod.POST)
public @ResponseBody String getTags(@RequestBody String name)
{
String variableAjax= name;
System.out.println("controller variable is " + variableAjax);
//that prints me this "{name: Joe, lastname: Smith}"
return variableAjax;
}
EDITED **** это мой класс Пользователь
public class Userimplements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String lastname;
public User(){}
}
Я редактировал мои контроллеры к следующему
@RequestMapping(value = "formShow", method = RequestMethod.GET)
public String formShow(Model model) {
return "formShow";
}
@RequestMapping(value = "formShow", method = RequestMethod.POST)
public @ResponseBody User getTags(@RequestBody final User user, Model model)
{
//what should i do here parse my user to JSON how??
user.setName("name changed");
model.("modifyname", user.getName());
return User;
}
Я отредактировал свой вопрос, у меня есть сомнения в том, как я должен вернуть свое значение изменения в мой код ajax и как я должен прочитать это значение в моем коде ajax, должен ли он быть в моем блоке успеха? и какие libs я должен использовать для преобразования моего объекта в объект JSON? должен ли я использовать 'com.fasterxml.jackson.databind.ObjectMapper;' использовать класс ObjectMapper, или я должен использовать 'import org.json.JSONObject;' для использования класса JSONObject – stackUser2000