[英]How to read json payload in restful webservice java
我試圖在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);
}
});
});
寧靜的網絡服務代碼:
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;
}
}
您需要添加如下注釋:
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;
}
}
您需要返回一個響應對象,如下所示:
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配置等。
以下鏈接可能有助於應用程序設置: 如何僅使用注釋設置JAX-RS應用程序(無web.xml)?
ceadarsoft有一個非常好用的json庫,可能對你有所幫助。 它將Json對象轉換為Java對象,而無需在模型上進行注釋。
maven依賴是:
<dependency>
<groupId>com.cedarsoftware</groupId>
<artifactId>json-io</artifactId>
<version>2.7.1</version>
</dependency>
這就是我想要的方式。
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;
}
}
感謝大家的投入,這有助於我解決我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.