2017-01-08 31 views
0

我目前正與春引導和JPA工作,這是我的DAO類:如何在Spring引導JPA中使用多個json數組?

public interface UserDao extends JpaRepository<User,String> { 
    @Query("select x from User x") 
    public List<User> findAllActivit(); 
} 

從這個道,如果我訪問控制器,它探討這一JpaRepository,JSON數據應該是這樣的:

{ 
    "id" : "56e74ac5-d40e-11e6-846c-308d99bdc4d0", 
    "user_name" : "alexander", 
    "user_password" : "e46fc836cca3acec03944314d1457c2ae6c68ef3", 
    "user_real_name" : "alexander darmawan", 
    "user_cuti_amount" : 9, 
    "user_position" : "head of business analyst", 
    "user_join" : "2012-09-10", 
    "activityList" : [ { 
    "id" : "185aeb3b-d52b-11e6-bd89-308d99bdc4d0", 
    "activity_date" : "2017-01-18", 
    "activity_name" : "Reject Julia Eka Ananda's cuti" 
    }, { 
    "id" : "a22af0d9-d529-11e6-bd89-308d99bdc4d0", 
    "activity_date" : "2017-01-02", 
    "activity_name" : "Accept Danu Nugraha's cuti" 
    } ] 
} 

有誰知道查詢作出上述JSON數據,其工作是這樣的:

{ 
     "idfromuser" : "56e74ac5-d40e-11e6-846c-308d99bdc4d0", 
     "idactivity" : "185aeb3b-d52b-11e6-bd89-308d99bdc4d0", 
     "activity_date" : "2017-01-18", 
     "activity_name" : "Reject Julia Eka Ananda's cuti" 
},{ 
     "idfromuser" : "56e74ac5-d40e-11e6-846c-308d99bdc4d0", 
     "idactivity" : "a22af0d9-d529-11e6-bd89-308d99bdc4d0", 
     "activity_date" : "2017-01-02", 
     "activity_name" : "Accept Danu Nugraha's cuti" 
} 

每個幫助將是寶貴的,我

+0

JPA和Spring數據存儲庫,別與JSON無關。如果您想更改JSON,則將其他對象序列化爲JSON,或者更改這些對象的JSON映射。 –

+0

我還是newbe,所以我試圖改變查詢是這樣的@Query(「從用戶x選擇activityList」)和結果只是暴露列表activityList。那麼我認爲我只需要加入它與ID權利?因爲有2個ID,可以使用別名嗎? –

回答

0

Spring Data JPA與您試圖嘗試的JSON轉換無關。這需要在Java做一次,我們從數據庫得到的結果回來了,即我們需要transform從舊格式到新格式的活動列表如下圖所示例如:

public static void main(String[] args) throws Exception{ 
    ObjectMapper objectMapper = new ObjectMapper(); 
    Map<String, Object> value = objectMapper.readValue("{ \"id\" : \"56e74ac5-d40e-11e6-846c-308d99bdc4d0\", \"user_name\" : \"alexander\", \"user_password\" : \"e46fc836cca3acec03944314d1457c2ae6c68ef3\", \"user_real_name\" : \"alexander darmawan\", \"user_cuti_amount\" : 9, \"user_position\" : \"head of business analyst\", \"user_join\" : \"2012-09-10\", \"activityList\" : [ { \"id\" : \"185aeb3b-d52b-11e6-bd89-308d99bdc4d0\", \"activity_date\" : \"2017-01-18\", \"activity_name\" : \"Reject Julia Eka Ananda's cuti\" }, { \"id\" : \"a22af0d9-d529-11e6-bd89-308d99bdc4d0\", \"activity_date\" : \"2017-01-02\", \"activity_name\" : \"Accept Danu Nugraha's cuti\" } ]}", Map.class); 

    List<Map<String, Object>> activityList = (List<Map<String, Object>>) value.get("activityList"); 

    List<Map<String, Object>> transformedList = new ArrayList<>(); 
    for(Map<String, Object> element : activityList){ 
     Map<String, Object> transformedElement = new LinkedHashMap<>(); 
     transformedElement.put("idfromuser", value.get("id")); 
     transformedElement.put("idactivity", element.get("id")); 
     transformedElement.put("activity_date", element.get("activity_date")); 
     transformedElement.put("activity_name", element.get("activity_name")); 
     transformedList.add(transformedElement); 
    } 

    System.out.println(objectMapper.writeValueAsString(transformedList)); 
} 
+0

你使用的是對象映射器,但如果我想通過列表來製作它,怎麼樣。這裏是我的控制器'@RequestMapping(「/ useractivity」) public List findAct()拋出異常{ return useri.findAllActivit(); }'我不知道如何映射它 –

+0

在這種情況下,您需要將'idfromuser'和'idactivity'字段添加到User類並在發送響應之前設置這些字段。或者更好,創建一個名爲UserDto的新類 –

相關問題