springboot往数据库存json并且取json

springboot往数据库存json并且取json

我也不知道是不是自己设置的数据类型
这个过程太痛苦了 已经不知道该不该记录了。
保存数据到数据库存的形式是varchar 取出来不能原样取了,只能是string然后还要自己处理数据整合成map才可以
这里是以list的形式存数据 在数据库中设置json但是varchar也是可以的

    /**
     * 用户点击确定后把购物车的内容存放到sql
     * @param jsonArray
     * @param request
     * @return
     */
    @PostMapping("/GenerateTable")
    public Result GenerateTable(@RequestBody JSONArray jsonArray,HttpServletRequest request){
        Long userId = AuthContextHolder.getUserId(request);
        advancePaymentService.insert(jsonArray,userId);
        return Result.ok();
    }

其中模板类需要加入注解如:

@Data
@ApiModel(value = "商品信息")
@TableName("advance_payment")
public class AdvancePayment extends BaseEntity {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "商品价格")
    @TableField("price")
    private Integer price;

    @ApiModelProperty(value = "商品名称")
    @TableField("userId")
    private long userId;

    @TableField(typeHandler = FastjsonTypeHandler.class,value = "join_cart_id")
    private List<Integer> joinCartId;

    @TableField(typeHandler = FastjsonTypeHandler.class,value = "detail")
    private List<HashMap<String,Object>> detail;

    @TableField("payId")
    private long payId;

}

但是拿取数据的时候会以string返回(求解答怎么从sql中拿到json数据并且以list的形式存放)

@Override
    public List<AdvancePaymentVo> getPageList(OrderQueryVo orderQueryVo) {

        Integer  commodityId = orderQueryVo.getCommodityId();
        String isPay = orderQueryVo.getIsPay();
        String commodityName = null;
        String pay = null;
        String noPay = null;
        if (!StringUtils.isEmpty(isPay)){
            if ("已支付".equals(isPay)){
                pay = "0";
                //如果未支付  那么pay=-1 已支付则pay=0
                orderQueryVo.setPay(pay);
            }else {
                noPay = "0";
                orderQueryVo.setNoPay(noPay);
            }
        }
        if (!StringUtils.isEmpty(commodityId)){
            commodityName = commodityService.getById(commodityId).getName();
            orderQueryVo.setCommodityName(commodityName);
        }
        //调用mapper的方法
        List<AdvancePaymentVo> aList = advancePaymentMapper.selectAll(orderQueryVo);
        aList.stream().forEach(itemVo->{
            //条件查询完毕整理数据
            String detail = itemVo.getDetail();
            List<Map> arrayList = new ArrayList<>();
            String[] numberList = detail.substring(0,detail.length()-2).replace("\"","").split("},");
            Arrays.stream(numberList).forEach(list->{
                String[] split = list.split(",");
                HashMap<String, String> map = new HashMap<>();
                String name = split[0].split(":")[1];
                String price = split[1].split(":")[1];
                String types = split[2].split(":")[1];
                String number = split[3].split(":")[1];
                String cart = split[4].split(":")[1];

                map.put("name",name);
                map.put("price",price);
                map.put("types",types);
                map.put("number",number);
                map.put("cart",cart);
                arrayList.add(map);
                itemVo.setParam(arrayList);
                long payId = itemVo.getPayId();
                if (payId==0){
                    itemVo.setPayStatus("未支付");
                }else {
                    itemVo.setPayStatus("已支付");
                }

            });
        });

        return aList ;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xenogenesis__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值