如何在restful web服务java中读取json有效负载

时间:2015-01-20 13:50:35

标签: java jquery web-services

我试图在java中的restful webservice中读取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 webservice code:

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;
    }
}

check the screenshot

4 个答案:

答案 0 :(得分:2)

您需要添加如下注释:

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

如果您正在执行get请求并附加到url,则可以使用:

@QueryParam("mydata") String test

您可能需要以下内容:

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

UPDATE ********************************************** ***************************

$(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;
    }
}

答案 1 :(得分:1)

您需要返回一个响应对象:

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();
    }
}

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

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

这假设您已将应用程序配置为使用jersey-rs实现(如jersey)以及正确的servlet配置等。

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

答案 2 :(得分:0)

ceadarsoft有一个非常好用的json库,可能对你有帮助。 它将Json对象转换为Java对象,而无需在模型上进行注释。

maven依赖是:

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

答案 3 :(得分:0)

这就是我想要的方式。

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;
    }
}

感谢大家的投入,这有助于我解决问题。