2016-04-10 28 views
0

我想用RestEasy學習Restful Web服務。我創建了一個Java類並嘗試使用實例變量,但默認範圍是請求範圍,在事件發生後,變量的值將被清除。我們如何在RestEasy類的不同方法中使用實例變量。 我的代碼如下:我們如何在RestEasy中使用實例變量?

 /* 
    * To change this license header, choose License Headers in Project Properties. 
    * To change this template file, choose Tools | Templates 
    * and open the template in the editor. 
    */ 
    package restService; 

    import java.util.HashMap; 
    import java.util.Map; 
    import javax.ws.rs.Consumes; 
    import javax.ws.rs.DELETE; 
    import javax.ws.rs.GET; 
    import javax.ws.rs.POST; 
    import javax.ws.rs.PUT; 
    import javax.ws.rs.Path; 
    import javax.ws.rs.Produces; 

    /** 
    * 
    * @author ilkaygunel 
    */ 
    @Path("/service") 
    public class Service { 
     Map<Integer, String> employeeMap = new HashMap<>(); 



    @GET 
    @Path("/show") 
    @Produces("application/json") 
    public Map show() 
    { 
     return employeeMap; 
    } 

    @POST 
    @Path("/addRecord") 
    @Consumes("application/json") 
    @Produces("application/json") 
    public Map addRecord(Employee employee) { 
     employeeMap.put(employee.getEmployeeId(), employee.getEmployeeName()+" "+employee.getEmployeeSurname()); 
     System.out.println("@POST ile işaretlenmiş metoda gelen veri:"); 
     System.out.println(employee.getEmployeeId()); 
     System.out.println(employee.getEmployeeName()); 
     System.out.println(employee.getEmployeeSurname()); 

     System.out.println("---HashMap İçindeki Veri (POST Metodundan)---"); 
     for (Map.Entry<Integer, String> entry : employeeMap.entrySet()) { 
      System.out.println(entry.getKey() +" " +entry.getValue()); 
     } 
     return employeeMap; 
    } 

    @PUT 
    @Path("/updateRecord") 
    @Consumes("application/json") 
    public void updateRecord(Employee employee) { 
     System.out.println("@PUT ile işaretlenmiş metoda gelen veri:"); 
     System.out.println(employee.getEmployeeId()); 
     System.out.println(employee.getEmployeeName()); 
     System.out.println(employee.getEmployeeSurname()); 

     System.out.println("HashMap'in Boyutu:"+employeeMap.size()); 

     for(Integer key : employeeMap.keySet()) { 
      if(key ==employee.getEmployeeId()) 
      { 
       System.out.println("Buraya Bak:"+employeeMap.get(key)); 
       employeeMap.put(key, employee.getEmployeeName()+" "+employee.getEmployeeSurname()); 
      } 
      break; 
     } 

     System.out.println("---HashMap İçindeki Veri (PUT Metodundan)---"); 
     for (Map.Entry<Integer, String> entry : employeeMap.entrySet()) { 
      System.out.println(entry.getKey() +" " +entry.getValue()); 
     } 
    } 

    @DELETE 
    public void deleteRecord() { 

    } 
} 

回答

0

最好的辦法是注入一些單身人士服務類如EmploeeManager其中包含僱員的地圖。 (我不知道你用什麼樣的技術彈簧/ CDI)

在另一方面,你可以使用

private static Map<Integer, String> employeeMap = new HashMap<>(); 

,也想同步的,因爲它可以被多個線程同時訪問。

0

看一看在JAX-RS 2.0 specification定義了有關資源類的生命週期:

3.1.1生命週期與環境

默認情況下,新的資源類實例爲每個請求創建 到那個資源。首先調用構造函數,然後注入任何請求的 依賴關係,然後調用適當的方法並最終使該對象可用於垃圾回收。 [...]

您在問題中描述的行爲是預期的:爲每個請求創建資源類的新實例。

存儲數據,可以使用以下方法:

  • 使用static場,也就是說,是由類的所有實例共享的領域;
  • 使用CDI或Spring等依賴注入框架,並將數據存儲到應用程序範圍的bean或單例中。這個bean可以注入你的資源類。
  • 使用數據庫。
相關問題