【问题标题】:OneToMany Mapping POJO to JSON SpringOneToMany 将 POJO 映射到 JSON Spring
【发布时间】:2016-10-20 05:58:26
【问题描述】:

我使用 PostgreSQL,我有这些表、地址和公司,与地址到公司的关系 OneToMany。我想检索一个地址列表,每个地址都包含一个公司列表。我实现了这两个表之间的连接,并检索了以下数据:

当执行这个查询时:

select ad.id,ad.geolocation, ca.id, ca.name_en, ca.name_el from 
address as ad right join company_address as ca on (ad.id = ca.address_id);

我检索到了这个表,我想将它映射为 JSON 格式,如下所示:

1;"0101000020E6100000C006335CD3043840504BBDB89EC14140";  6; "Petros"; 
1;"0101000020E6100000C006335CD3043840504BBDB89EC14140"; 12; "Shop3";
1;"0101000020E6100000C006335CD3043840504BBDB89EC14140"; 13; "Shop3";
7;"0101000020E6100000A03418D984063840D8DD978E94C14140";  7; "Mike";
7;"0101000020E6100000A03418D984063840D8DD978E94C14140"; 14; "Shop5";
7;"0101000020E6100000A03418D984063840D8DD978E94C14140"; 15; "Shiop8";
9;"0101000020E6100000804127840E163840CC28965B5AC64140"; 10; "Shop2";
9;"0101000020E6100000804127840E163840CC28965B5AC64140"; 11; "Shop3";

您知道如何使用优雅的方式将结果转换为以下格式吗?

POJO:

private Long id;
private Geolocation geolocation;
private List<ShopObj> shops;

ShopObj 类:

class ShopObj{
  private Long id;
  private String nameEn;
}

Json 数据:

{
  "code": "200",
    "data": [
       {
        "id": 1,
        "geolocation": "0101000020E6100000C006335CD3043840504BBDB89EC14140",
        "shops": [
          {
           "id": 6,
            "nameEn": "Petros"
          },
          {
            "id": 12,
            "nameEn": "Shop3"
          },
          {
            "id": 13,
            "nameEn": "Shop3"
          }
        ]
      },
      {
        "id": 7,
        "geolocation": "0101000020E6100000A03418D984063840D8DD978E94C14140",
        "shops": [
          {
            "id": 7,
            "nameEn": "Mike"
          },
          {
            "id": 14,
            "nameEn": "Shop5"
          },
          {
            "id": 15,
            "nameEn": "Shiop8"
          }
        ]
      },
      {
        "id": 9,
        "geolocation": "0101000020E6100000804127840E163840CC28965B5AC64140",
        "shops": [
          {
            "id": 10,
            "nameEn": "Shop2"
          },
          {
            "id": 11,
            "nameEn": "Shop3"
          }
        ]
      }
   ]
}

【问题讨论】:

    标签: java json postgresql spring-boot mapping


    【解决方案1】:

    当然。

    1. 创建一个空的Map&lt;Long, POJO&gt;,其中包含 POJO 作为值,它们的 ID 作为键
    2. 遍历您的行。
    3. 对于每一行,获取POJO ID,并从map中获取对应的POJO。如果尚未在地图中,请创建 POJO 并将其添加到地图中
    4. 为当前行创建一个Shop,并将该Shop添加到上一步获得/创建的POJO的Shop列表中
    5. 最后,映射的 values() 是您要序列化为 JSON 的 Collection&lt;POJO&gt;

    【讨论】:

      【解决方案2】:

      我实现了下面的代码并为我的案例工作,但你知道是否有自动映射我的数据的方法吗?

       List<ProductTest> productTests = productRepository.getProductTest();
          Map<Long, ProductT> products = new HashMap<Long, ProductT>();
          for (ProductTest pt : productTests) {
              ProductT productT = products.get(pt.getId());
              if (productT == null) {
                  productT = new ProductT(pt.getId(), pt.getNameEl(), new ArrayList<MediaT>());
                  products.put(pt.getId(), productT);
              }
              MediaT mediaT = new MediaT(pt.getMediaId(), pt.getMultimediaPath());
              productT.getMediaList().add(mediaT);
          }
          return products.values();
      

      【讨论】:

        猜你喜欢
        • 2017-03-31
        • 1970-01-01
        • 2017-02-24
        • 2020-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-31
        相关资源
        最近更新 更多