如何在Controller中只调用一次calla方法

时间:2017-04-18 02:23:43

标签: java rest spring-boot singleton spring-restcontroller

我有一个REST API,我想调用一个从csv文件创建TreeMap的方法,我想在每个API调用的其余部分使用TreeMap。所以我只想调用该方法来设置TreeMap并希望将TreeMap用于其余的API调用。

我创建TreeMap的方法是

public void createTreeMap(){

 CSVReader reader = new CSVReader(new FileReader("C:\\Users\\result.csv"), ',' , '"' , 1);
                    TreeMap <Integer,ArrayList<Long>> result=new TreeMap <Integer,ArrayList<Long>>();
                    //Read CSV line by line and use the string array as you want
                    String[] nextLine;
                    while ((nextLine = reader.readNext()) != null) {
                       if (nextLine != null) {
                          //Verifying the read data here
                           ArrayList<Long> result_01 = new ArrayList<Long>(); 

                          for(int k=0;k<nextLine[1].replace("[", "").replace("]", "").replace(" ", "").split(",").length;k++){
                              result_01.add(Long.parseLong(nextLine[1].replace("[", "").replace("]", "").replace(" ", "").split(",")[k]));
                          }


                          result.put(Integer.parseInt(nextLine[0]), result_01);



                       }
                     }  

}

以下是Rest api Controller

@RestController
public class HomeController {



@RequestMapping(value="/api/sid",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.GET)
    public ResponseEntity<Map<String, List<Model>>> getid(@RequestParam("sid") int sid) {




       Map<String, List<Model>> Map = new HashMap<String, Object>();
       List<Model> model=new List<Model>();
       model=get_model();
       Map.put("hi",model)

      return new ResponseEntity<Map<String, List<Model>>>(Map,HttpStatus.OK);

    }


    @ResponseBody   

    public List<Model>  get_model(){
        List list =new List<Model>();
     //here I have to use the treemap

        return list;



    }

    }

每次调用api时我都可以创建树图。但是我只需要创建一次,然后在响应体get_model方法中访问它。感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

使用单例bean,即创建另一个bean,从csv文件创建TreeMap,在bean的成员变量中创建TreeMap。

@Bean
public class RefData{
     public TreeMap<Object> treeMap;

     public TreeMap<Object> getData(){
         if(this.treeMap == null){  
            //read csv file & prepare TreeMap & store it in this.treeMap
         }
         return this.treeMap;
     }
}