如何在 Spring Boot JPA 中使用多个 json 数组?
Posted
技术标签:
【中文标题】如何在 Spring Boot JPA 中使用多个 json 数组?【英文标题】:how to work with multiple json array in Spring boot JPA? 【发布时间】:2017-05-22 17:31:23 【问题描述】:我目前使用 Spring Boot 和 JPA,这是我的 DAO 类:
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"
每一个帮助对我来说都是宝贵的
【问题讨论】:
JPA 和 Spring 数据存储库与 JSON 没有任何关系。如果要更改 JSON,则将其他对象序列化为 JSON,或者更改这些对象的 JSON 映射。 我还是新手,所以我尝试将查询更改为这样的 @Query("select activityList from User x") 并且结果只是从 activityList 公开列表。那我想我只需要用身份证加入它吗?因为有2个id,可以用别名吗? 【参考方案1】: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));
【讨论】:
您使用对象映射器,但如果我想通过 List@RequestMapping("/useractivity") public List<User> findAct() throws Exception return useri.findAllActivit();
我不知道如何映射它idfromuser
和 idactivity
字段添加到 User 类并在发送回响应之前设置这些字段。或者更好的是,创建一个名为 UserDto
的新类以上是关于如何在 Spring Boot JPA 中使用多个 json 数组?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中使用 Hibernate/JPA 返回多级 json
如何在JAVA JPA Spring Boot中的一个SQL查询中选择多个数据
Spring Boot JPA:为同一参数传递多个值 (JPQL)