首页 > 解决方案 > 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 类?

标签: javarestweb-applicationsjerseyjax-rs

解决方案


我设法找到了一个非常简单的解决方案:

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


推荐阅读