up:: SpringBoot电商项目商品模块后台的商品列表接口

说明:

(1) 本篇博客内容:开发【商品详情】接口;

(2)一个开发习惯: Service层的方法,其注释:最好不要带有太浓的具体业务指向,而应代用一般化的业务指向;比如:

PS:该项目,至此前面的Service中,很多注释自己写的都太带有有具体业务的色彩了;就不改了,以后注意;


一:【商品详情】接口介绍;

1.【商品详情】接口文档;

说明:

(1) 因为这个接口是前台的,所以是不需要管理员登录的;可以看到,我们在AdminFilterConfig中的配置,也不会拦截这个接口;

(2) 这个接口的返回值类型,要求是Product对象序列化为的JSON;

2.【商品详情】接口,在界面上的表现;

如果我们点击某个商品,可以查看该该商品的详情页;


二:正式开发;

1.创建ProductController类;创建查看商品详情的方法:detail()方法;

ProductController:

 
     package com.imooc.mall.controller;
 
     import com.imooc.mall.common.ApiRestResponse;
     import com.imooc.mall.model.pojo.Product;
     import com.imooc.mall.service.ProductService;
     import io.swagger.annotations.ApiOperation;
     import org.springframework.beans.factory.annotation.Autowired;
     import org.springframework.stereotype.Controller;
     import org.springframework.web.bind.annotation.PostMapping;
     import org.springframework.web.bind.annotation.RequestParam;
     import org.springframework.web.bind.annotation.ResponseBody;
 
     /**
      * 描述:【商品模块】前台的Controller
      */
     @Controller
     public class ProductController {
 
         @Autowired
         ProductService productService;
 
         /**
          * 查看商品详情
          * @param id
          * @return
          */
         @ApiOperation("商品详情")
         @GetMapping("/product/detail")
         @ResponseBody
         public ApiRestResponse detail(@RequestParam("id") Integer id) {
             Product product = productService.detail(id);
             return ApiRestResponse.success(product);
         }
 
     }

说明:

(1) 因为【针对管理员的】和【针对普通用户的】,其存在很多的不同;所以,我们把其拆成了不同的Controller,这样做逻辑更加清晰;

(2) 方法说明;

(3) 这儿调用了我们在Service层编写的,根据id查商品的方法:detail()方法;这在下一部分介绍;

2.在ProductServiceImpl中编写查看商品详情的方法:detail()方法;并在ProductService接口中,反向生成方法的声明;

声明: 虽然,在Controller我们分别创建了ProductAdminController和ProductController来分别对应【针对管理员的】和【针对普通用户的】;但是,在Service层,我们就没要区分了;;;;;因为,【针对管理员的】和【针对普通用户的】的很多业务,其背后逻辑是差不多的;我们写在一个Service中,也方便方法等的复用;

一个开发习惯: Service层的方法,其注释:最好不要带有太浓的具体业务指向,而应代用一般化的业务指向;比如:


(1)在ProductServiceImpl中编写查看商品详情的方法:detail()方法;

 
         /**
          * 根据id,查询商品
          * @param id
          * @return
          */
         @Override
         public Product detail(Integer id) {
             Product product = productMapper.selectByPrimaryKey(id);
             return product;
         }

说明:

(1) 这儿是直接调用【mybatis-generator】帮我们生成的,根据id查数据的方法:selectByPrimaryKey()方法;


(2)在ProductService接口中,反向生成方法的声明;


三:测试;

启动项目;