Jersey RESTful:如何使用本地 json 文件填充 DAO?
Jersey RESTful: How to populate DAO with a local json file?
这是我第一次构建 Jersey Restful 网络服务。
该项目应该是一个提供有关 Reddit 帖子信息的服务器。现在,这些信息存储在一个大的 JSON 文件中,因为它不应该被操纵,我的想法是将这些信息以 Post 的形式存储在 dao class 中实例。
这是我项目的文件夹结构:filesView
所以我的想法是通过读取 json 文件来填充 dao class,如下所示:
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 class?
我设法找到了一个非常简单的解决方案:
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()
就足够了
这是我第一次构建 Jersey Restful 网络服务。
该项目应该是一个提供有关 Reddit 帖子信息的服务器。现在,这些信息存储在一个大的 JSON 文件中,因为它不应该被操纵,我的想法是将这些信息以 Post 的形式存储在 dao class 中实例。
这是我项目的文件夹结构:filesView
所以我的想法是通过读取 json 文件来填充 dao class,如下所示:
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 class?
我设法找到了一个非常简单的解决方案:
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()
就足够了