QQ登录

只需一步,快速开始

微信登录

扫一扫,访问微社区

滴石it网

滴石it网 首页 滴石博客 查看内容

基于【 springBoot +springCloud+vue 项目】二 || 后端框架详解

2020-8-12 18:04| 发布者: admin| 查看: 20| 评论: 0|来自: 原创

摘要: 基于【 springBoot +springCloud+vue 项目】二 || 后端框架详解

前言

在上一篇中,我们搭建了一个-API服务提供接口模块,目的为了提供了消费方进行调用。为什么不直接在service层直接提供调用接口,而是重新创建一个接口层模块?
首先我们需要对Feign有所了解。Feign是一种声明式、模板化的HTTP客户端。Feign的功能类似dubbo暴露服务,但是与dubbo稍有不同的是Feign是HTTP REST接口的形式暴露的。

正文

之前,我一直不理解,-interface模块和-api模块是否可以合并为一个,经过对项目的拆分测试,总算有所了解。那么,为了便于理解,对上一篇搭建的框架进行调整,把pinyougou-manager-web模块单独抽离出来,作为一个独立的项目。
调整后结构如下:将标为红色模块删除。

独立新建一个项目:

一、提供接口服务

1、商品服务API

在pinyougou-sellergoods-ap模块中,创建BrandApiService,提供商品服务接口:

  1. @RequestMapping("/brand")
  2. public interface BrandApiService {
  3.  
  4. /**
  5. * 下拉列表
  6. * @return 品牌数据
  7. */
  8. @RequestMapping("/selectOptionList")
  9. public BaseResponse selectOptionList();
  10.  
  11. /**
  12. * 根据品牌名或首字母模糊查询品牌并分页
  13. * @param brand 查询条件
  14. * @param page 当前页
  15. * @param size 每页显示的数量
  16. * @return 总记录数和当前页数据的封装对象
  17. */
  18. @RequestMapping("/search")
  19. public BaseResponse search(@RequestBody TbBrand brand, @RequestParam("page") int page, @RequestParam("size") int size);
  20.  
  21. /**
  22. * 运营商后台 品牌列表分页
  23. * @param page 当前页
  24. * @param size 每页显示数量
  25. * @return 总记录数和当前页数据的封装对象
  26. */
  27. @RequestMapping("/findPage")
  28. public BaseResponse findPage(@RequestParam("page") int page,@RequestParam("size") int size);
  29.  
  30. /**
  31. * 显示所有品牌
  32. * @return 所有品牌对象
  33. */
  34. @RequestMapping("/findAll")
  35. public BaseResponse findAll();
  36.  
  37. /**
  38. * 添加品牌
  39. * 注:此处对空白,重名方法未进行校验(或可以在数据库中添加唯一约束和not null)
  40. * @param brand 实体类对象
  41. * @return 添加成功或失败
  42. */
  43. @RequestMapping("/add")
  44. public BaseResponse add(@RequestBody TbBrand brand);
  45.  
  46. /**
  47. * 根据id查询品牌
  48. * @param id 品牌id
  49. * @return 品牌对象
  50. */
  51. @RequestMapping("/findOne")
  52. public BaseResponse findOne(@RequestParam("id") Long id);
  53.  
  54. /**
  55. * 更新品牌数据
  56. * @param brand 品牌对象
  57. * @return 成功或失败
  58. */
  59. @RequestMapping("/update")
  60. public BaseResponse update(@RequestBody TbBrand brand);
  61.  
  62. /**
  63. * 多项品牌数据删除
  64. * @param ids 品牌id数组
  65. * @return 成功或失败
  66. */
  67. @RequestMapping("/delete")
  68. public BaseResponse delete(@RequestParam("ids") Long[] ids);
  69.  
  70. }

我们可以理解为就是一个controller,可以根据需求提供REST风格的api

2.商品服务API的实现

在pinyougou-sellergoods-service模块中实现API接口

  1. @RestController
  2. public class BrandApiServiceImpl extends BaseApiService implements BrandApiService {
  3.  
  4. @Autowired
  5. private IBrandService brandService;
  6.  
  7. @Override
  8. public BaseResponse selectOptionList() {
  9. List<Map> mapResult = brandService.selectOptionList();
  10. return setResultSuccess(mapResult);
  11. }
  12.  
  13. @Override
  14. public BaseResponse search(TbBrand brand, int page, int size) {
  15. PageResult pageResult = brandService.findPage(brand, page, size);
  16. return setResultSuccess(pageResult);
  17. }
  18.  
  19. @Override
  20. public BaseResponse findPage(int page, int size) {
  21. PageResult pageResult = brandService.findPage(page, size);
  22. return setResultSuccess(pageResult);
  23. }
  24.  
  25. @Override
  26. public BaseResponse findAll() {
  27. List<TbBrand> listResult = brandService.findAll();
  28. return setResultSuccess(listResult);
  29. }
  30.  
  31. @Override
  32. public BaseResponse add(TbBrand brand) {
  33. try{
  34. int result=brandService.add(brand);
  35. if(result>0){
  36. return setResultSuccess(result);
  37. }
  38. return setResultError();
  39. }catch (Exception e){
  40. return setResultError();
  41. }
  42.  
  43. }
  44.  
  45. @Override
  46. public BaseResponse findOne(Long id) {
  47. TbBrand result = brandService.findOne(id);
  48. return setResultSuccess(result);
  49. }
  50.  
  51. @Override
  52. public BaseResponse update(TbBrand brand) {
  53. try{
  54. int result = brandService.update(brand);
  55. if(result>0){
  56. return setResultSuccess(result);
  57. }
  58. return setResultError();
  59. }catch (Exception e){
  60. return setResultError();
  61. }
  62.  
  63. }
  64.  
  65. @Override
  66. public BaseResponse delete(Long[] ids) {
  67. try{
  68. int result = brandService.delete(ids);
  69. if (result==ids.length && result>0){
  70. return setResultSuccess(result);
  71. }
  72. return setResultError(result);
  73. }catch (Exception e){
  74. return setResultError();
  75. }
  76.  
  77. }
  78. }

以上的两部分代码,我们可以理解为:该两部分组成一个controller。

二、运营商管理后台

1、调用服务

在pinyougou-manager-web项目中,创建包feign,并创建一个BrandFeign,用于调用商品服务接口

  1. @FeignClient(value = "sellergoods") //写service层的名称
  2. public interface BrandFeign extends BrandApiService {
  3.  
  4. }

使用FeignClient调用接口

在BrandFeign接口类中继承商品服务提供的接口类 ,相当于可以使用BrandFeign 调用所有提供的商品服务。

2.使用服务

接着创建一个BrandController,进行服务的调用

  1. @RestController
  2. @RequestMapping("/brands")
  3. public class BrandController extends BaseApiService {
  4.  
  5. @Autowired
  6. private BrandFeign brandFeign;
  7.  
  8. @RequestMapping("/selectOptionList")
  9. @CrossOrigin
  10. public BaseResponse selectOptionList() {
  11. Object object=brandFeign.selectOptionList();
  12. String json=new JSONObject().toJSONString(object);
  13. BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
  14.  
  15. return result;
  16. }
  17.  
  18. @RequestMapping("/search")
  19. public BaseResponse search(@RequestBody TbBrand brand, @RequestParam("page") int page, @RequestParam("size") int size) {
  20. Object object= brandFeign.search(brand, page, size);
  21. String json=new JSONObject().toJSONString(object);
  22. BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
  23. return result;
  24. }
  25.  
  26. @RequestMapping("/findPage")
  27. public BaseResponse findPage(int page, int size) {
  28. Object object= brandFeign.findPage(page, size);
  29. String json=new JSONObject().toJSONString(object);
  30. BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
  31. return result;
  32. }
  33.  
  34. @RequestMapping("/findAll")
  35. public BaseResponse findAll() {
  36. Object object= brandFeign.findAll();
  37. String json=new JSONObject().toJSONString(object);
  38. BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
  39. return result;
  40. }
  41.  
  42. @RequestMapping("/add")
  43. public BaseResponse add(TbBrand brand) {
  44.  
  45. Object object= brandFeign.add(brand);
  46. String json=new JSONObject().toJSONString(object);
  47. BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
  48. return result;
  49.  
  50. }
  51.  
  52. @RequestMapping("/findOne")
  53. public BaseResponse findOne(Long id) {
  54. Object object= brandFeign.findOne(id);
  55. String json=new JSONObject().toJSONString(object);
  56. BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
  57. return result;
  58. }
  59.  
  60. @RequestMapping("/update")
  61. public BaseResponse update(TbBrand brand) {
  62.  
  63. Object object= brandFeign.update(brand);
  64. String json=new JSONObject().toJSONString(object);
  65. BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
  66. return result;
  67. }
  68.  
  69. @RequestMapping("/delete")
  70. public BaseResponse delete(Long[] ids) {
  71.  
  72. Object object= brandFeign.delete(ids);
  73. String json=new JSONObject().toJSONString(object);
  74. BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
  75. return result;
  76.  
  77. }
  78. }

到此,我们的项目代码已经全部完成,但是,我们在BrandFeign中不能像在聚合工程中一样,直接调用BrandApiService,我们想要继承该类,必须提供api接口项目的依赖。

三、idea中jar包导出与导入

在idea中我们要怎么导出jar包使用?

这里提供两种思路:

1.导出jar包本地使用

2.导出jar包,使用maven打包到本地仓库

接下来我就简单说一下第一种方式,更详细资源请到其他资源查看。

1、idea导出jar包

直接上图:之前一直使用eclipse,改用idea,花了我好长时间才弄好

1、ctrl+shift+s

直接照着图片做,选择Empty

然后就可以在当前项目中发现有一个out文件夹,里面就存着刚刚导出的jar包了

2、idea引用jar包

导出jar包怎么直接在项目中使用?

同样:ctrl+shift+s

然后就直接看图了:

然后,点'+',选择JARs or directories,找到刚刚导出的jar包(在当前项目resource下,新建lib,包导出的jar包放里面),点击就ok了

之后,我们就可以看到导入的jar包了

点开看一看?我们就可以知道,文章开始提出的问题了,主要目的还是不会让服务消费者看到我们的源码。

四、进入测试阶段

同样:启动注册中心,启动service服务,最后启动我们的manager-web项目

浏览器输入地址:http://localhost:9101/api/brands/selectOptionList

如果能返回数据,说明我们成功了,感觉有点小激动啊。


鲜花

握手

雷人

路过

鸡蛋

相关分类

展开

QQ| 滴石it网 ( 苏ICP备17029875号-1 )  

GMT+8, 2020-9-24 05:57 , Processed in 0.048022 second(s), 7 queries , File On.

申明:所有资源均是网上搜集或网友上传提供,本站内容仅供观摩学习交流之用,将不对任何资源负法律责任。如有侵犯您的版权,请及时发邮件联系我们(2608609000@qq.com),或客服QQ:2608609000,我们将尽快处理!

© 2015-2016 滴石it网

返回顶部