如何检索从ajax调用传递给Java API的JSON

时间:2016-07-12 05:22:35

标签: java json ajax 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 数据秒= 2 + 2& userId = 16& first = 1 + one

任何想法如何将上述响应转换为JSONObject或任何其他集合,以便我可以适当地引用传递的JSON。

4 个答案:

答案 0 :(得分:1)

您使用jackson库。杰克逊将Java对象转换为JSON或来自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.
}

答案 1 :(得分:0)

如果用一个真实对象替换String userDetails,例如UserDetails userDetails,它应该可以工作。

或者尝试使用MultiValueMap而不是String。从下面的链接看来,如果这是参数而不是Spring自动使用FormHttpMessageConverter。 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody

答案 2 :(得分:0)

您可以使用Jersey API将JSON转换为服务器端的Value Object。 Jersey Jar将JSON自动转换为VO,将VO自动转换为JSON。 下面是如何在服务器端接收VO的快照:

@Secure(role = "somerole")

答案 3 :(得分:0)

感谢您的答复,根据@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")); }

再次感谢