Java Reflect与JSONArray的一个应用场景

1.应用


Java Reflect与JSONArray的一个应用场景_第1张图片
image.png

2.数据库结构


Java Reflect与JSONArray的一个应用场景_第2张图片
image.png

3.我想要的json格式


Java Reflect与JSONArray的一个应用场景_第3张图片
image.png

4.场景:
经理提出要求,给他把图一的页面渲染好,嗯~

Java Reflect与JSONArray的一个应用场景_第4张图片
image.png

我的做法:直接在JsonTemplateParams实体类中声明一个ItemSku实体类,通过value(两张表的关联字段)调用查询接口,然后setItemSku就拼装完成了。

可是经理看了之后不允许使用这种方法。。。(模板实体类比较特殊)

5.Map + 反射
那好吧,这样的话使用一个Map来拼装,反正用model.addAttribute("",);传到页面 前端thymleaf模板会识别的。

map格式:List> array = new ArrayList();
已经拿到了JsonTemplatesPutsParams集合:

List jsonTemplatesPutsParams = 
getParams(pageId,claName+".itemNo");

写法如下:

    List> array = new ArrayList<>();
    Class clazz = JsonTemplatesPutsParams.class;
    for (JsonTemplatesPutsParams jsonTemplate: jsonTemplatesPutsParams) {
        Map map = new HashMap<>();
        for (Field f: clazz.getDeclaredFields()) {
            f.setAccessible(true);
            try {
                map.put(f.getName(), f.get(jsonTemplate));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
      ItemSku itemSku = itemResponsitoryAdmin.selectItemSkuList(jsonTemplate.getValue()).get(0);
      itemSku.setImage(COSUtil.getSignatureUrl(itemSku.getImage()));
      map.put("itemSku", itemSku);
      array.add(map);
    }

有点臃肿,总之不是很满意,查询了一下JSON的api,感觉JSONArray写一下会简单很多。

6.JSONArray

    JSONArray array = (JSONArray)JSON.toJSON(jsonTemplatesPutsParams);
    for (int i=0, len=array.size(); i

这样的话感觉精简了许多.
model.addAttribute("item",array);

7.html代码

# 商品规格号 商品规格编号 商品名称 商品图片 排序号 操作
商品规格图片

你可能感兴趣的:(Java Reflect与JSONArray的一个应用场景)