本文介绍买家端,即首页的商品列表信息的获取。
一般一个项目由前端和后端合作开发,事先需要新建开发文档,如约定好接口应该怎么写。
比如我们要求后端返回给前端这样的 JSON 信息,该怎么做呢?
让我们开始吧。
JSON
VO
@JsonProperty 注解
泛型
...其他的继承上一节
1、最终的文件结构
VO 全称即 View Object,即试图层对象
我们再看一下上面的 JSON 信息,我们至少需要新建三个对象,我们暂且认为它有三层吧。
1、最外面的一层 ResultVO
ResultVO.java
注意:因为我们暂时不知道 data 是什么类型的数据,所以使用泛型,当然也可以直接用 Object 类型,但是后面要强转不是很方便。
2、第二层 商品列表信息 ProductVO
ProductVO.java
注意:我们这里的 ProductInfoVO 类还没有创建,待会儿会创建。
我们看到 JSON 中第二层和第三层都有 name,而且 JSON 属性的名称和我们的属性名也不是一致,所以这里可以使用 @JsonProperty 注解来进行序列化。
3、第三层 商品信息 ProductInfoVO
ProductInfoVO.java
注意:这里的 ProductInfoVO.java 和之前 entity/ProductInfo.java 不一样,前者是返回给前端的商品信息,不需要给那么多,不利于隐私保护。后者是商品的实体类,里面包括商品的完整信息,一般不会之前暴露给前台。
为了让我们测试上面封装的对象是否有用,我们新建一个控制器
BuyerProductController.java
启动 Tomcat, 在浏览器访问 http://localhost:8080/sell/list
效果即是前面的截图
本文链接:https://liuyanzhao.com/6663.html
一般一个项目由前端和后端合作开发,事先需要新建开发文档,如约定好接口应该怎么写。
比如我们要求后端返回给前端这样的 JSON 信息,该怎么做呢?
让我们开始吧。
本文新关键词
JSON
VO
@JsonProperty 注解
泛型
...其他的继承上一节
一、基本准备
1、最终的文件结构
二、新建 VO 层
VO 全称即 View Object,即试图层对象
我们再看一下上面的 JSON 信息,我们至少需要新建三个对象,我们暂且认为它有三层吧。
1、最外面的一层 ResultVO
ResultVO.java
- package com.liuyanzhao.sell.VO;
- import lombok.Data;
- /**
- * Http请求返回的最外层对象
- * @Author: 言曌
- * @Date: 2017/11/12
- * @Time: 下午12:56
- */
- @Data
- public class ResultVO<T> {
- //错误码
- private Integer code;
- //提示信息
- private String msg;
- //返回的具体内容
- private T data;
- }
注意:因为我们暂时不知道 data 是什么类型的数据,所以使用泛型,当然也可以直接用 Object 类型,但是后面要强转不是很方便。
2、第二层 商品列表信息 ProductVO
ProductVO.java
- package com.liuyanzhao.sell.VO;
- import com.fasterxml.jackson.annotation.JsonProperty;
- import lombok.Data;
- import java.util.List;
- /**
- * 商品(包含类目)
- * @Author: 言曌
- * @Date: 2017/11/12
- * @Time: 下午1:20
- */
- @Data
- public class ProductVO {
- @JsonProperty("name")
- private String categoryName;
- @JsonProperty("type")
- private Integer categoryType;
- @JsonProperty("foods")
- private List<ProductInfoVO> productInfoVOList;
- }
注意:我们这里的 ProductInfoVO 类还没有创建,待会儿会创建。
我们看到 JSON 中第二层和第三层都有 name,而且 JSON 属性的名称和我们的属性名也不是一致,所以这里可以使用 @JsonProperty 注解来进行序列化。
3、第三层 商品信息 ProductInfoVO
ProductInfoVO.java
- package com.liuyanzhao.sell.VO;
- import com.fasterxml.jackson.annotation.JsonProperty;
- import lombok.Data;
- import java.math.BigDecimal;
- /**
- * 商品详情
- * @Author: 言曌
- * @Date: 2017/11/12
- * @Time: 下午1:25
- */
- @Data
- public class ProductInfoVO {
- @JsonProperty("id")
- private String productId;
- @JsonProperty("name")
- private String productName;
- @JsonProperty("price")
- private BigDecimal productPrice;
- @JsonProperty("description")
- private String productDescription;
- @JsonProperty("icon")
- private String productIcon;
- }
注意:这里的 ProductInfoVO.java 和之前 entity/ProductInfo.java 不一样,前者是返回给前端的商品信息,不需要给那么多,不利于隐私保护。后者是商品的实体类,里面包括商品的完整信息,一般不会之前暴露给前台。
三、Controller 层
为了让我们测试上面封装的对象是否有用,我们新建一个控制器
BuyerProductController.java
- package com.liuyanzhao.sell.controller;
- import com.liuyanzhao.sell.VO.ProductInfoVO;
- import com.liuyanzhao.sell.VO.ProductVO;
- import com.liuyanzhao.sell.VO.ResultVO;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
- import java.math.BigDecimal;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * @Author: 言曌
- * @Date: 2017/11/12
- * @Time: 下午12:13
- */
- @RestController
- public class BuyerProductController {
- @GetMapping("list")
- public ResultVO list() {
- ResultVO resultVO = new ResultVO();
- ProductVO productVO = new ProductVO();
- List<ProductInfoVO> productInfoVOList = new ArrayList<ProductInfoVO>();
- ProductInfoVO productInfoVO = new ProductInfoVO();
- ProductInfoVO productInfoVO2 = new ProductInfoVO();
- resultVO.setCode(0);
- resultVO.setMsg("成功");
- productInfoVO.setProductId("123458");
- productInfoVO.setProductName("雪碧");
- productInfoVO.setProductIcon("http:xxx/123.jpg");
- productInfoVO.setProductPrice(new BigDecimal("4.5"));
- productInfoVO.setProductDescription("透心凉,心飞扬");
- productInfoVOList.add(productInfoVO);
- productInfoVO2.setProductId("123459");
- productInfoVO2.setProductName("青岛啤酒");
- productInfoVO2.setProductIcon("http:xxx/111.jpg");
- productInfoVO2.setProductPrice(new BigDecimal("6.5"));
- productInfoVO2.setProductDescription("激情一灌到底!");
- productInfoVOList.add(productInfoVO2);
- productVO.setCategoryName("饮料");
- productVO.setCategoryType(2);
- productVO.setProductInfoVOList(productInfoVOList);
- resultVO.setData(productVO);
- return resultVO;
- }
- }
启动 Tomcat, 在浏览器访问 http://localhost:8080/sell/list
效果即是前面的截图
本文链接:https://liuyanzhao.com/6663.html
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏