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() 就足够了