簡體   English   中英

Java:讀取JSON文件並將其公開在REST服務中

[英]Java: Read in JSON file and expose it in a REST service

我是一名前端Web開發人員,試圖了解有關后端的更多信息。 目前,我只想讀取本地JSON文件並將其公開在REST服務中,以供AngularJS解析(這有意義嗎?)。 我相信我已經正確設置了servlet,但是不確定如何從Java的角度來解決這個問題。 值得注意的是,我是一名JavaScript程序員。 我試圖在兩種方法之間進行選擇。

該類中包含以下方法

@Path("/")
public class JsonRESTService {
    .....
}

第一種方法

@GET
@Path("/jsonService")
@Consumes("application/json")
@Produces("application/json")
public Response jsonREST(InputStream incomingData) {

        StringBuilder jsonBuilder = new StringBuilder();
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(incomingData));
            String line = null;
            while((line = in.readLine()) != null) {
                jsonBuilder.append(line);
            }
        } catch(Exception e) {
            System.out.println("Error Parsing: - ");
        }
        System.out.println("Data Received: " + jsonBuilder.toString());

        return Response.status(200).entity(jsonBuilder.toString()).build();
}

第二種方法 :不確定return什么。

@GET
@Path("/jsonService")
@Consumes("application/json")
@Produces("application/json")
public Response jsonREST(InputStream incomingData) {

    JSONParser parser = new JSONParser();
    try {
        Object obj = parser.parse(new FileReader("C:/files/flat.json"));
        JSONObject jsonObject = (JSONObject) obj;
    } catch(Exception e) {
        e.printStackTrace();
    }
}

web.xml Servlet映射

<servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

因此,這應該公開給http:// localhost:8080 / myapp / rest / jsonService 我從一個教程中獲得了一些代碼,但是似乎我想擁有一個返回JSONObject而不是Response 那是對的嗎? 我是在正確的軌道上嗎,還是有一個很好的例子說明我尚未找到的我正在嘗試做的事情?

有多種實現方法。 您可以在第二種方法中嘗試這種方式

將返回類型更改為String然后使用來將JSONObject的值作為String返回

return jsonObject.toString();

在客戶端,Angular JS服務-您可以通過以下方式將String轉換為JSON對象:

var obj = JSON.parse(text);

因此,現在obj是一個JSON對象,您可以將其用於進一步處理。

如果您是JavaScript開發人員,並且快速入門是目標,那么我建議您結帳

http://www.dropwizard.io/getting-started.html

這里有一些優點a)許多服務器基礎結構的東西都被隱藏了b)您可以專注於實現細節c)無需弄清楚如何部署它,等等,它是內置的服務器。

為了回答有關返回類型的問題-服務器將返回javax.ws.rs.core.Response-或Response對象的某些其他變體。 這封裝了HTTP狀態代碼http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html之類的內容

因此,為了發送回一個簡單的響應,您可以使用類似:

 return Response.accepted().entity(String.format("{\"JSON\" : \"%s\"}",value)).build();

將字符串替換為從文件系統讀取的JSON字符串,或從對象生成JSON-無論您選擇哪種毒葯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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