Day06_商品分类(vuetify-nginx-cors)与品牌查询 (6)

Day06_商品分类(vuetify-nginx-cors)与品牌查询

路径是,并且默认加上了/api的前缀,这恰好与我们的网关设置匹配,我们只需要把地址改成网关的地址即可,因为我们使用了nginx反向代理,这里可以写域名。

接下来,我们要做的事情就是编写后台接口,返回对应的数据即可。

4.2.2.实体类

在leyou-item-interface中添加category实体类:

Day06_商品分类(vuetify-nginx-cors)与品牌查询

内容:

@Table(name="tb_category") public class Category { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String name; private Long parentId; private Boolean isParent; // 注意isParent生成的getter和setter方法需要手动加上Is private Integer sort; // getter和setter略 }

需要注意的是,这里要用到jpa的注解,因此我们在leyou-item-iterface中添加jpa依赖

<dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency> 4.2.3.controller

编写一个controller一般需要知道四个内容:

请求方式:决定我们用GetMapping还是PostMapping

请求路径:决定映射路径

请求参数:决定方法的参数

返回值结果:决定方法的返回值

在刚才页面发起的请求中,我们就能得到绝大多数信息:

Day06_商品分类(vuetify-nginx-cors)与品牌查询

请求方式:Get,插叙肯定是get请求

请求路径:/api/item/category/list。其中/api是网关前缀,/item是网关的路由映射,真实的路径应该是/category/list

请求参数:pid=0,根据tree组件的说明,应该是父节点的id,第一次查询为0,那就是查询一级类目

返回结果:??

根据前面tree组件的用法我们知道,返回的应该是json数组:

[ { "id": 74, "name": "手机", "parentId": 0, "isParent": true, "sort": 2 }, { "id": 75, "name": "家用电器", "parentId": 0, "isParent": true, "sort": 3 } ]

对应的java类型可以是List集合,里面的元素就是类目对象了。也就是List<Category>

添加Controller:

Day06_商品分类(vuetify-nginx-cors)与品牌查询

controller代码:

@Controller @RequestMapping("category") public class CategoryController { @Autowired private CategoryService categoryService; /** * 根据父id查询子节点 * @param pid * @return */ @GetMapping("list") public ResponseEntity<List<Category>> queryCategoriesByPid(@RequestParam("value = "pid", defaultValue = "0") Long pid) { if (pid == null || pid.longValue() < 0) { // 响应400,相当于ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); return ResponseEntity.badRequest().build(); } List<Category> categories = this.categoryService.queryCategoriesByPid(pid); if (CollectionUtils.isEmpty(categories)) { // 响应404 return ResponseEntity.notFound().build(); } return ResponseEntity.ok(categories); } } 4.2.4.service

一般service层我们会定义接口和实现类,不过这里我们就偷懒一下,直接写实现类了:

Day06_商品分类(vuetify-nginx-cors)与品牌查询

@Service public class CategoryService { @Autowired private CategoryMapper categoryMapper; /** * 根据parentId查询子类目 * @param pid * @return */ public List<Category> queryCategoriesByPid(Long pid) { Category record = new Category(); record.setParentId(pid); return this.categoryMapper.select(record); } } 4.2.5.mapper

我们使用通用mapper来简化开发:

public interface CategoryMapper extends Mapper<Category> { }

要注意,我们并没有在mapper接口上声明@Mapper注解,那么mybatis如何才能找到接口呢?

我们在启动类上添加一个扫描包功能:

@SpringBootApplication @EnableDiscoveryClient @MapperScan("com.leyou.item.mapper") // mapper接口的包扫描 public class LeyouItemServiceApplication { public static void main(String[] args) { SpringApplication.run(LeyouItemServiceApplication.class, args); } } 4.2.6.启动并测试

我们不经过网关,直接访问::8081/category/list

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfdsz.html