簡體   English   中英

如何在restful webservice java中讀取json有效負載

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM