解决VO类属性与要返回的json串字段名称不一样的问题
结论:解决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串格式)
原文作者:水巷石子
原文地址: https://blog.csdn.net/qq_37924905/article/details/109201328
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/qq_37924905/article/details/109201328
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章