微信点餐SpringBoot-07:买家商品---API的实现

0. 前端代码示例

{
    "code": 0,
    "msg": "成功",
    "data": [
        {
            "name": "热榜",
            "type": 1,
            "foods": [
                {
                    "id": "123456",
                    "name": "皮蛋粥",
                    "price": 1.2,
                    "description": "好吃的皮蛋粥",
                    "icon": "http://xxx.com",
                }
            ]
        },
        {
            "name": "好吃的",
            "type": 2,
            "foods": [
                {
                    "id": "123457",
                    "name": "慕斯蛋糕",
                    "price": 10.9,
                    "description": "美味爽口",
                    "icon": "http://xxx.com",
                }
            ]
        }
    ]
}

在这里插入图片描述

1. ResultVO

用于封装API最外层的三个属性的对象:

/**
 * @author hh
 *
 * http请求返回的最外层对象
 */
@Data
public class ResultVO<T> {

    //错误码
    private Integer code;

    //提示信息
    private String message;

    //具体内容
    private T data;
}

2. ProductVO

用于封住商品类目的对象

/**
 * 商品包含类目
 */
@Data
public class ProductVO{

    //因为前端使用的是name,为了增加程序的可读性,使用categoryName
    @JsonProperty("name")
    private String categoryName;

    //类目标号
    @JsonProperty("type")
    private Integer categoryType;

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

3. ProductInfoVO

用于封装商品数据的对象:

/**
 * 商品详情
 */

@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;
}

4. ResultVOUtil

用于封装返回结果和信息的工具类:

public class ResultVOUtil {

    //成功
    public static ResultVO success(Object object){
        ResultVO resultVO = new ResultVO();
        resultVO.setData(object);
        resultVO.setCode(0);
        resultVO.setMessage("成功");
        return resultVO;
    }

    //成功
    public static ResultVO success(){
        return success(null);
    }

    //失败
    public static ResultVO error(Integer code,String message){
        ResultVO resultVO = new ResultVO();
        resultVO.setCode(code);
        resultVO.setMessage(message);
        return resultVO;
    }
}

5. Controller层

编写Controller层时从最外层向里面写:
在这里插入图片描述
在这里插入图片描述

/**
 * @author hh
 *
 * 买家商品Controller层的实现,展示善品列表
 */
@RestController
@RequestMapping("/buyer/product")
public class BuyerProductController {
    @Autowired
    private ProductService productService;
    @Autowired
    private CategoryService categoryService;


    @GetMapping("/list")
    public ResultVO list(){

        //1.数据库的查询:查询所有的上架商品
        List<ProductInfo> productInfoList = productService.findUpAll();

        //2.数据库的查询:查询类目(编号)
        List<Integer> categoryTypeList = new ArrayList<>();
        for(ProductInfo productInfo:productInfoList){
            categoryTypeList.add(productInfo.getCategoryType());
        }
        List<ProductCategory> productCategoryList
                = categoryService.findByCategoryTypeIn(categoryTypeList);

        //3.数据拼装:将查询的数据拼装进各个对象中
        List<ProductVO> productVOList = new ArrayList<>();
        for(ProductCategory productCategory:productCategoryList){
            ProductVO productVO = new ProductVO();
            productVO.setCategoryName(productCategory.getCategoryName());
            productVO.setCategoryType(productCategory.getCategoryType());

            List<ProductInfoVO> productInfoVOList = new ArrayList<>();
            for(ProductInfo productInfo:productInfoList){
                if(productInfo.getCategoryType().equals(productCategory.getCategoryType())){
                    ProductInfoVO productInfoVO = new ProductInfoVO();
//                productInfoVO.setProductId(productInfo.getProductId());
//                productInfoVO.setProductName(productInfo.getProductName());
//                productInfoVO.setProductPrice(productInfo.getProductPrice());
//                productInfoVO.setProductDescription(productInfo.getProductDescription());
//                productInfoVO.setProductIcon(productInfo.getProductIcon());

                    //上面的代码太啰嗦,可以使用工具类BeanUtils
                    //将productInfo对象的属性值拷贝到productInfoVO对象的属性中
                    BeanUtils.copyProperties(productInfo,productInfoVO);
                    productInfoVOList.add(productInfoVO);
                }
            }
            productVO.setProductInfoVOList(productInfoVOList);
            productVOList.add(productVO);
        }

        return ResultVOUtil.success(productVOList);
    }
}

在这里插入图片描述

6. 前后端联调

不得不说在前端这块浪费啦好长时间哦,因为配置好域名后一度一闪而过紧接着报错,跳到了一个错误的连接,让我一度以为是DNS域名解析和host文件的问题,所以反复搜索解决方法。

1、访问虚拟机地址:

访问之后直接跳到了另一个链接,我想爆粗口,这个是正确的,因为前端做了一层逻辑,一旦cookie中少了openid就会这样:
在这里插入图片描述
2、访问下面一个地址192.168.2.114/#/order,随便设置一下openid的值:
在这里插入图片描述
3、设置域名:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4、使用域名访问:

在这里插入图片描述
这里为了和项目路径一致,将heng.com改成sell.com,之后使用sell.com访问。

发布了665 篇原创文章 · 获赞 115 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_42764468/article/details/104736862
今日推荐