如何在 restful 网络服务 java 中读取 json 负载

How to read json payload in restful webservice java

我正在尝试读取 java 中 restful 网络服务中的 json 负载。但我不知道该怎么做。我进行了很多研究,但找不到有用的东西。谁能帮帮我。

JQUERY:

$(function () {
    var arr = {"name":"susheel", "rollNo:" :"123423"};
    $.ajax({
        url: 'http://localhost:8080/restapi/test',
        type: 'POST',
        data: JSON.stringify(arr),
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        async: false,
        success: function (msg) {
            alert(msg);
        }
    });
});

Restful 网络服务代码:

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/test")
public class ProjectInfo {      
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public String submitProject(String s) {        
        return s;
    }
}

ceadarsoft 有一个非常易于使用的 json 库,可能会对您有所帮助。 它将 Json 个对象转换为 Java 个对象,而无需在模型上添加注释。

maven依赖是:

<dependency>
    <groupId>com.cedarsoftware</groupId>
    <artifactId>json-io</artifactId>
    <version>2.7.1</version>
</dependency>

您需要 return 像这样的响应对象:

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/test")
public class ProjectInfo {      
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response submitProject(Student s) {        
        return Response.status(Response.Status.OK).entity(s).build();
    }
}

您实际上不需要提供 return 是 json 表示的 toString。您的 jax-rs 实现将知道如何将您的对象序列化为 json.

此外,如果 post 的主体除了对象的 json 表示之外不包含任何其他内容,那么您不需要在参数列表中提供 @FormDataParam 注释。

这假设您已将应用程序配置为使用 jax-rs 实现,例如带有正确 servlet 配置的 jersey 等。

以下 link 可能有助于应用程序设置: How to set up JAX-RS Application using annotations only (no web.xml)?

您需要像这样添加注释:

public String submitProject(@FormParam("mydata") String test) {

如果您正在执行获取请求并附加到 url,您将使用:

@QueryParam("mydata") String test

你可能想要这样的东西:

data: {mydata : JSON.stringify(arr)}

更新******************************************** ******************************

$(function () {
    var arr = {"name":"susheel", "rollNo:" :"123423"};
    $.ajax({
        url: 'http://localhost:8080/restapi/test',
        type: 'POST',
        data: {name : "susheel", rollno : "123423"},
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        async: false,
        success: function (msg) {
            alert(msg);
        }
    });
});

@XmlRootElement()
public class Student {
    private String name;
    private String rollNo;
    public Student()
    {
    }
    public Student(String name, String rollNo)
    {
        this.name = name;
        this.rollNo = rollNo;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRollNo() {
        return rollNo;
    }

    public void setRollNo(String rollNo) {
        this.rollNo = rollNo;
    }
}


import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/test")
public class ProjectInfo {      
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    public Student submitProject(@FormParam("name") String name, @FormParam("rollno") String rollNo) {
        Student student = new Student(name, rollNo);      
        return student;
    }
}

这就是我想要的方式。

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.codehaus.jettison.json.JSONObject;

@Path("/test")
public class ProjectInfo {      
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public String submitProject(JSONObject obj) {  
        //read the json object data and insert the content to DB.
        //generate the response you like and return it
        //ObjectMapper class from codehaus can be used to generated desired json response.
        return generatedJSONResponse;
    }
}

感谢大家的意见,帮助我解决了问题。