Java:读入JSON文件并在REST服务中公开它

时间:2015-09-15 13:48:55

标签: java json rest

我是一名前端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的方法。那是对的吗?我是在正确的轨道上,还是有一个非常好的例子,说明我还没有找到我想要做的事情?

2 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。你可以在第二种方法中尝试这种方式

将返回类型更改为String,并使用

JSONObject的值作为String返回
return jsonObject.toString();

在客户端,Angular JS服务 - 您可以通过

将String转换为JSON对象
var obj = JSON.parse(text);

因此,现在obj是一个JSON对象,您可以将其用于进一步处理。

答案 1 :(得分:0)

如果您是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 - 你选择的毒药是什么。