2017-01-08 4 views
0

В настоящее время я работаю с пружинным ботинке и JPA, а вот мой DAO класс:Как работать с несколькими массивами json в Spring boot JPA?

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

из этого Dao, если я получить доступ к контроллеру, который изучить этот 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

i still newbe, поэтому я попытался изменить запрос таким образом, чтобы это было @Query («select activityList from User x»), и результат просто выставляет список из ActivityList. то я думаю, мне просто нужно присоединиться к нему с id правильно? потому что есть 2 идентификатора, возможно ли использовать псевдоним? –

ответ

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

вы используете объект mapper, но как насчет того, хочу ли я сделать его по списку . здесь мой контроллер '@RequestMapping ("/useractivity ") public List findAct() throws Exception { return useri.findAllActivit(); } 'Я не знаю, как его сопоставить –

+0

В этом случае вам нужно добавить поля' idfromuser' и 'idactivity' в класс User и установить эти поля перед отправкой ответа. Или еще лучше, создайте новый класс под названием 'UserDto' –

Смежные вопросы