繁体   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