[英]How to retrieve JSON passed from ajax call to Java API
我正在按如下方式调用JAVA API:
var userDetails = {
userId: userId,
first : "1 one",
second : "2 two"
}
$.ajax({
type : 'POST',
url : "http://" + config.domain + config.root + "/myExp/allExperiment",
dataType : "json",
data : userDetails,
success : function(data) {})
});
并尝试获取传递的对象,如下所示:
@RequestMapping(value = "/allExperiment", method = RequestMethod.POST)
public JsonMapModel getAllDatasets(@RequestBody String userDetails) {
System.out.println("Data is " + userDetails);
}
我在API处获得关注数据是 second = 2 + two&userId = 16&first = 1 + one
知道如何将以上响应转换为JSONObject或任何其他集合,以便可以适当地引用传递的JSON。
您使用杰克逊图书馆。 杰克逊将Java对象与JSON转换
(pom.xml)
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
(js)
var userDetails = {
userId: userId,
first : "1 one",
second : "2 two"
}
userDetails = JSON.stringify(userDetails);
$.ajax({
type : 'POST',
url : "http://" + config.domain + config.root + "/myExp/allExperiment",
contentType : 'application/json',
data : userDetails,
success : function(data) {
},
error : function(request, status, error) {
}
});
(模型)
public class TestModel {
private String userId;
private String first;
private String second;
//getter, setter
}
(控制器)
@RequestMapping(value = "/allExperiment", method = RequestMethod.POST)
public @ResponseBody String getAllDatasets(@RequestBody TestModel userDetails) {
return null; // break point, check model.
}
如果将String userDetails替换为实际对象(例如UserDetails userDetails),则该方法应该起作用。
或尝试使用MultiValueMap代替String。 从下面的链接看来,如果这是参数,Spring会自动使用FormHttpMessageConverter。 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody
您可以使用Jersey API在服务器端将JSON转换为Value Object。 Jersey Jar会自动将JSON转换为VO和将VO转换为JSON。 以下是如何在服务器端接收VO的快照:
@POST
@Path("/allExperiment")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public JsonMapModel getAllDatasets(UserDetails userDetails) {
System.out.println("Data is " + userDetails);
}
感谢@Alexandru Marina的建议,以下回复对我有用:
@RequestMapping(value = "/allExperiment", method = RequestMethod.POST)
public JsonMapModel getAllDatasets(@RequestBody MultiValueMap<String, String> userDetails) {
System.out.println("User id is " userDetails.getFirst("userId")); }
再次感谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.