如何在 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;
}
}
感谢大家的意见,帮助我解决了问题。
我正在尝试读取 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;
}
}
感谢大家的意见,帮助我解决了问题。