java - Jersey RESTful:如何使用本地 json 文件填充 DAO?
问题描述
这是我第一次构建 Jersey Restful Web 服务。
该项目应该是一个提供有关 Reddit 帖子信息的服务器。目前,这些信息存储在一个大的 JSON 文件中,因为它不应该被操纵,所以我的想法是将此信息以 Post 实例的形式存储在 dao 类中。
这是我项目的文件夹组织:filesView
所以我的想法是通过读取 json 文件来填充 dao 类,如下所示:
public enum PostDao {
instance;
private Map<String, Post> posts = new HashMap<String, Post>();
private PostDao() {
//JSON parser object to parse read file
System.out.println("init");
JSONParser jsonParser = new JSONParser();
try {
FileReader reader = new FileReader("src/main/resources/data/posts.json");
//Read JSON file
Object obj = jsonParser.parse(reader);
JSONArray postsArr = (JSONArray) obj;
for (Object p : postsArr) {
JSONObject post = (JSONObject) p;
Post pobj = new Post(post.get("title"), post.get("author"));
posts.put(pobj.getId(), pobj);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
public Map<String, Post> getModel() {
return posts;
}
问题是我不知道将 json 文件放在哪里以及路径是什么。
是否有存储此类文件的标准文件夹和路径?还是有不同的方式来填充 dao 类?
解决方案
我设法找到了一个非常简单的解决方案:
JSONParser jsonParser = new JSONParser();
try {
//get JSON file's path
InputStream in = this.getClass().getResourceAsStream("/data/posts.json");
BufferedReader br = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
//Read JSON file
Object obj = jsonParser.parse(br.readLine());
for (Object p : (JSONArray) obj) {
JSONObject post = (JSONObject) p;
//add post to mapping
this.addPost(new Post(generateId(),
(String)post.get("user"),
(String)post.get("title"),
(String)post.get("date")));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
注意:我的 json 文件仅包含一行(作为文本文件),这就是为什么BufferedReader.readLine()
就足够了
推荐阅读
- c# - 实体框架导航属性中 2 列乘积的总和 + 其他两列的乘积
- python-3.x - Python 类中带有前向引用的可选或联合,由 mypy 错误标记
- java - 如何删除 Firebase 数据库中数组中的项目?
- ruby-on-rails - 使用 Rails 从单表继承中获取混合类型的集合
- ios - 从firebase获取名称显示
- postgresql - 检查物化视图是否存在?
- css - 为什么部分和渐变无法在移动设备 (iOS) 上正确显示?
- javascript - 如何防止javascript中的自动顶部滚动?
- html - 将 Webapp 上的文件上传到 Docker 容器中
- azure-active-directory - 在 Microsoft Graph 中获取许可证 SKU 的显示名称