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

avatar 2017年11月12日14:45:20 5 3600 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
本文介绍买家端,即首页的商品列表信息的获取。

一般一个项目由前端和后端合作开发,事先需要新建开发文档,如约定好接口应该怎么写。

比如我们要求后端返回给前端这样的 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
  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0