解决VO类属性与要返回的json串字段名称不一样的问题

29 篇文章 4 订阅
4 篇文章 0 订阅

结论:解决VO类属性与要返回的json串字段名称不一样的问题,需要用到@JsonProperty(“xxx”)这个注解

那具体怎么使用呢?下面我拿我个人的例子来说明。

需要返回的json串字段格式如下:

在这里插入图片描述

{
    "code": 0,
    "msg": "成功",
    "data": [
        {
            "name": "热榜",
            "type": 1,
            "foods": [
                {
                    "id": "123456",
                    "name": "皮蛋粥",
                    "price": 1.2,
                    "description": "好吃的皮蛋粥",
                    "icon": "http://xxx.com",
                }
            ]
        }

但可以明显看到,有两个名称一样的name字段。会让人容易混淆。

所以在VO类,我们具体的来写,如:categoryName,productNam。这样写,就可以达到见名知意的效果。

那么问题来了,你这样写VO类的属性,返回的json串字段,也会是categoryName,productNam。

这样就会与我们想要返回的两个name字段不一致。

那么在不改json串两个name名称的情况下,如何达到categotyName在转json的串的时候是name呢?

这就要用到@JsonProperty("name")

案例解决方法

在VO类的categoryName属性上面加上@JsonProperty("name")注解。

这样做,就会将VO类的categoryName属性在转json串的时候,字段名称不会是CategotyName,而是注解中的name。

这样,会与要求返回的name是一样的了,前端可以接收到相应的数据,而VO类属性,也能达到见名知意效果。

具体代码

ProductInfoVO

/**
 * Created by 李柏霖
 * 2020/10/17 21:20
 */

package com.lbl.VO;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.math.BigDecimal;

@Data
public class ProductInfoVO {

    @JsonProperty("id")
    private String productiId;
    @JsonProperty("name")
    private String productnName;
    @JsonProperty("price")
    private BigDecimal productPrice;
    @JsonProperty("description")
    private String productDescription;
    @JsonProperty("icon")
    private String productIcon;
}

ProductVO

/**
 * 商品(包含类目)
 * Created by 李柏霖
 * 2020/10/17 21:12
 */

package com.lbl.VO;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;

@Data
public class ProductVO {

    @JsonProperty("name")
    private String categoryName;

    @JsonProperty("type")
    private Integer categoryType;

    @JsonProperty("foods")
    private List<ProductInfoVO> productInfoVOList;
}

ResultVO

/**
 * http请求返回的最外层对象
 * Created by 李柏霖
 * 2020/10/17 20:45
 */

package com.lbl.VO;

import lombok.Data;

@Data
public class ResultVO<T> {

    //错误码
    private Integer code;
    //提示信息
    private String msg;
    //返回的具体内容
    private T data;
}

BuyerProductController

(这边只是返回json字段名,并没有加真实数据,单纯为了验证json串格式)

/**
 * 买家商品
 * Created by 李柏霖
 * 2020/10/17 20:11
 */

package com.lbl.controller;

import com.lbl.VO.ProductInfoVO;
import com.lbl.VO.ProductVO;
import com.lbl.VO.ResultVO;
import com.lbl.dataObject.ProductCategory;
import com.lbl.dataObject.ProductInfo;
import com.lbl.service.ICategoryService;
import com.lbl.service.IProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/buyer/product")
public class BuyerProductController {

    @Autowired
    IProductService productService;

    @Autowired
    ICategoryService categoryService;

    @GetMapping("/list")
    public ResultVO list(){
        //1.查询所有的上架商品
        List<ProductInfo> productInfoList = productService.findUpAll();
        //2.查询类目(一次性查询)
        List<ProductCategory> categoryList = new ArrayList<>();

        //3.数据拼装


        //最外层(1层)
        ResultVO<Object> resultVO = new ResultVO<>();
        resultVO.setCode(0);
        resultVO.setMsg("成功");
        //类目层(2层)
        ProductVO productVO = new ProductVO();
        //商品详情层(3层)
        List<ProductInfoVO> productInfoVOList=new ArrayList<>();
        ProductInfoVO productInfoVO = new ProductInfoVO();
        productInfoVOList.add(productInfoVO);




        //在1层拼接2层
        resultVO.setData(productVO);
        //在类(在2层拼接3层)
        productVO.setProductInfoVOList(productInfoVOList);
        return resultVO;
    }
}

页面效果:

(这边只是返回json字段名,并没有加真实数据,单纯为了验证json串格式)

在这里插入图片描述

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值