将 JSON 数据传递给 Spring MVC 控制器
Posted
技术标签:
【中文标题】将 JSON 数据传递给 Spring MVC 控制器【英文标题】:passing JSON data to a Spring MVC controller 【发布时间】:2013-08-30 03:38:19 【问题描述】:我需要向 Spring MVC 控制器发送一个 JSON 字符串。但我不需要 有任何表单绑定,我只需要将纯 JSON 数据发送到 Controller 类。我正在对 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
- 将 Json 对象转换为 java @ResponseBody
- 将 Java 对象转换为 json
【讨论】:
请添加您对人的假设 Person 是一个普通的 POJO 类。这里我们使用的是 Person 类型的数据。【参考方案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;
【讨论】:
.val() 函数从何而来? 我花了很多时间来找出非常好的例子。这只是一个,对我帮助很大。【参考方案3】:您可以使用 JSON.stringify(jsonObject) 对 JSON 对象进行字符串化,并在控制器上将其作为字符串接收。
在 Controller 中,您可以使用 javax.json 来转换和操作它。
下载 .jar 并将其添加到项目库中并导入 JsonObject。
要创建一个json对象,可以使用
JsonObjectBuilder job = Json.createObjectBuilder();
job.add("header1", foo1);
job.add("header2", foo2);
JsonObject json = job.build();
要从字符串中读取,可以使用
JsonReader jr = Json.createReader(new StringReader(jsonString));
JsonObject json = jsonReader.readObject();
jsonReader.close();
【讨论】:
以上是关于将 JSON 数据传递给 Spring MVC 控制器的主要内容,如果未能解决你的问题,请参考以下文章