我试图在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;
}
}
答案 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;
}
}
感谢大家的投入,这有助于我解决问题。