Передача данных JSON в контроллер Spring MVC
Мне нужно отправить строку JSON в контроллер Spring MVC. Но я не
имеют какие-либо привязки к нему, мне просто нужно отправить простые данные JSON в класс Controller. Я делаю вызов JQuery AJAX для метода контроллера, например, приведенного ниже кода.
$.ajax ({
url: "./save",
type: "POST",
data: JSON.stringify(array),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(){
alert("success ");
}
});
Но как я могу получить его в методе Controller? (Примечание: это просто данные JSON, а не представление формы).
Ответы
Ответ 1
Добавьте следующие зависимости
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.7</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.7</version>
</dependency>
Измените запрос следующим образом
$.ajax({
url:urlName,
type:"POST",
contentType: "application/json; charset=utf-8",
data: jsonString, //Stringified Json Object
async: false, //Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation
cache: false, //This will force requested pages not to be cached by the browser
processData:false, //To avoid making query String instead of JSON
success: function(resposeJsonObject){
// Success Message Handler
}
});
Сторона контроллера
@RequestMapping(value = urlPattern , method = RequestMethod.POST)
public @ResponseBody Person save(@RequestBody Person jsonString) {
Person person=personService.savedata(jsonString);
return person;
}
@RequestBody
- Объект Covert Json для java
@ResponseBody
- преобразовать объект Java в json
Ответ 2
-
HTML
$('#save').click(function(event) {
var jenis = $('#jenis').val();
var model = $('#model').val();
var harga = $('#harga').val();
var json = { "jenis" : jenis, "model" : model, "harga": harga};
$.ajax({
url: 'phone/save',
data: JSON.stringify(json),
type: "POST",
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success: function(data){
alert(data);
}
});
event.preventDefault();
});
-
контроллер
@Controller
@RequestMapping(value="/phone")
public class phoneController {
phoneDao pd=new phoneDao();
@RequestMapping(value="/save",method=RequestMethod.POST)
public @ResponseBody
int save(@RequestBody Smartphones phone)
{
return pd.save(phone);
}
-
ДАО
public Integer save(Smartphones i) {
int id = 0;
Session session=HibernateUtil.getSessionFactory().openSession();
Transaction trans=session.beginTransaction();
try {
session.save(i);
id=i.getId();
trans.commit();
}
catch(HibernateException he){}
return id;
}
Ответ 3
Вы можете связать объект JSON с JSON.stringify(jsonObject) и получить его на контроллере как String.
В контроллере вы можете использовать javax.json для преобразования и управления этим.
Загрузите и добавьте .jar в файлы проекта и импортируйте JsonObject.
Чтобы создать объект json, вы можете использовать
JsonObjectBuilder job = Json.createObjectBuilder();
job.add("header1", foo1);
job.add("header2", foo2);
JsonObject json = job.build();
Чтобы прочитать его из String, вы можете использовать
JsonReader jr = Json.createReader(new StringReader(jsonString));
JsonObject json = jsonReader.readObject();
jsonReader.close();