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



我正在调用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+二&用户 Id=16&第一=1+一

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

你使用杰克逊图书馆。杰克逊将 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.
}

您可以使用 Jersey API 在服务器端将 JSON 转换为值对象。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")); }

再次感谢

如果您将字符串用户详细信息替换为实际对象,例如UserDetails userDetails,它应该可以工作。

或者尝试使用多值映射而不是字符串。从下面的链接来看,如果这是参数,那么Spring会自动使用FormHttpMessageConverter。http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody

相关内容

  • 没有找到相关文章

最新更新