Spring Boot点餐系统实战(4)–买家商品API(上)

本文介绍买家端,即首页的商品列表信息的获取。 一般一个项目由前端和后端合作开发,事先需要新建开发文档,如约定好接口应该怎么写。 比如我们要求后端返回给前端这样的 JSON 信息,该怎么做呢? 让我们开始吧。  

本文新关键词

JSON VO @JsonProperty 注解 泛型 ...其他的继承上一节  

一、基本准备

1、最终的文件结构  

二、新建 VO 层

VO 全称即 View Object,即试图层对象 我们再看一下上面的 JSON 信息,我们至少需要新建三个对象,我们暂且认为它有三层吧。 1、最外面的一层  ResultVO ResultVO.java
  1. package com.liuyanzhao.sell.VO;
  2. import lombok.Data;
  3. /**
  4.  * Http请求返回的最外层对象
  5.  * @Author: 言曌
  6.  * @Date: 2017/11/12
  7.  * @Time: 下午12:56
  8.  */
  9. @Data
  10. public class ResultVO<T> {
  11.     //错误码
  12.     private Integer code;
  13.     //提示信息
  14.     private String msg;
  15.     //返回的具体内容
  16.     private T data;
  17. }
注意:因为我们暂时不知道 data 是什么类型的数据,所以使用泛型,当然也可以直接用 Object 类型,但是后面要强转不是很方便。   2、第二层 商品列表信息 ProductVO ProductVO.java
  1. package com.liuyanzhao.sell.VO;
  2. import com.fasterxml.jackson.annotation.JsonProperty;
  3. import lombok.Data;
  4. import java.util.List;
  5. /**
  6.  * 商品(包含类目)
  7.  * @Author: 言曌
  8.  * @Date: 2017/11/12
  9.  * @Time: 下午1:20
  10.  */
  11. @Data
  12. public class ProductVO {
  13.     @JsonProperty("name")
  14.     private String categoryName;
  15.     @JsonProperty("type")
  16.     private Integer categoryType;
  17.     @JsonProperty("foods")
  18.     private List<ProductInfoVO> productInfoVOList;
  19. }
注意:我们这里的 ProductInfoVO 类还没有创建,待会儿会创建。 我们看到 JSON 中第二层和第三层都有 name,而且 JSON 属性的名称和我们的属性名也不是一致,所以这里可以使用 @JsonProperty 注解来进行序列化。   3、第三层 商品信息 ProductInfoVO ProductInfoVO.java
  1. package com.liuyanzhao.sell.VO;
  2. import com.fasterxml.jackson.annotation.JsonProperty;
  3. import lombok.Data;
  4. import java.math.BigDecimal;
  5. /**
  6.  * 商品详情
  7.  * @Author: 言曌
  8.  * @Date: 2017/11/12
  9.  * @Time: 下午1:25
  10.  */
  11. @Data
  12. public class ProductInfoVO {
  13.     @JsonProperty("id")
  14.     private String productId;
  15.     @JsonProperty("name")
  16.     private String productName;
  17.     @JsonProperty("price")
  18.     private BigDecimal productPrice;
  19.     @JsonProperty("description")
  20.     private String productDescription;
  21.     @JsonProperty("icon")
  22.     private String productIcon;
  23. }
注意:这里的 ProductInfoVO.java 和之前 entity/ProductInfo.java 不一样,前者是返回给前端的商品信息,不需要给那么多,不利于隐私保护。后者是商品的实体类,里面包括商品的完整信息,一般不会之前暴露给前台。  

三、Controller 层

为了让我们测试上面封装的对象是否有用,我们新建一个控制器 BuyerProductController.java
  1. package com.liuyanzhao.sell.controller;
  2. import com.liuyanzhao.sell.VO.ProductInfoVO;
  3. import com.liuyanzhao.sell.VO.ProductVO;
  4. import com.liuyanzhao.sell.VO.ResultVO;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import java.math.BigDecimal;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. /**
  11.  * @Author: 言曌
  12.  * @Date: 2017/11/12
  13.  * @Time: 下午12:13
  14.  */
  15. @RestController
  16. public class BuyerProductController {
  17.     @GetMapping("list")
  18.     public ResultVO list() {
  19.         ResultVO resultVO = new ResultVO();
  20.         ProductVO productVO = new ProductVO();
  21.         List<ProductInfoVO> productInfoVOList = new ArrayList<ProductInfoVO>();
  22.         ProductInfoVO productInfoVO = new ProductInfoVO();
  23.         ProductInfoVO productInfoVO2 = new ProductInfoVO();
  24.         resultVO.setCode(0);
  25.         resultVO.setMsg("成功");
  26.         productInfoVO.setProductId("123458");
  27.         productInfoVO.setProductName("雪碧");
  28.         productInfoVO.setProductIcon("http:xxx/123.jpg");
  29.         productInfoVO.setProductPrice(new BigDecimal("4.5"));
  30.         productInfoVO.setProductDescription("透心凉,心飞扬");
  31.         productInfoVOList.add(productInfoVO);
  32.         productInfoVO2.setProductId("123459");
  33.         productInfoVO2.setProductName("青岛啤酒");
  34.         productInfoVO2.setProductIcon("http:xxx/111.jpg");
  35.         productInfoVO2.setProductPrice(new BigDecimal("6.5"));
  36.         productInfoVO2.setProductDescription("激情一灌到底!");
  37.         productInfoVOList.add(productInfoVO2);
  38.         productVO.setCategoryName("饮料");
  39.         productVO.setCategoryType(2);
  40.         productVO.setProductInfoVOList(productInfoVOList);
  41.         resultVO.setData(productVO);
  42.         return resultVO;
  43.     }
  44. }
  启动 Tomcat, 在浏览器访问  http://localhost:8080/sell/list 效果即是前面的截图   本文链接:https://liuyanzhao.com/6663.html

发表评论

目前评论:1