基于【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,提供商品服务接⼝:
@RequestMapping("/brand")
public interface BrandApiService {
/**
* 下拉列表
* @return品牌数据
*/
@RequestMapping("/selectOptionList")
public BaseResponse selectOptionList();
/**
* 根据品牌名或⾸字母模糊查询品牌并分页
* @param brand 查询条件
* @param page 当前页
* @param size 每页显⽰的数量
* @return总记录数和当前页数据的封装对象
*/
@RequestMapping("/search")
public BaseResponse search(@RequestBody TbBrand brand, @RequestParam("page") int page, @RequestParam("size") int size);
/**
* 运营商后台品牌列表分页
* @param page 当前页
* @param size 每页显⽰数量
* @return总记录数和当前页数据的封装对象
*/
@RequestMapping("/findPage")
public BaseResponse findPage(@RequestParam("page") int page,@RequestParam("size") int size);
/**
* 显⽰所有品牌
* @return所有品牌对象
*/
@RequestMapping("/findAll")
public BaseResponse findAll();
/**
* 添加品牌
* 注:此处对空⽩,重名⽅法未进⾏校验(或可以在数据库中添加唯⼀约束和not null)
* @param brand 实体类对象
* @return添加成功或失败
*/
@RequestMapping("/add")
public BaseResponse add(@RequestBody TbBrand brand);
/**
* 根据id查询品牌
* @param id 品牌id
* @return品牌对象
*/
@RequestMapping("/findOne")
public BaseResponse findOne(@RequestParam("id") Long id);
/**
* 更新品牌数据
* @param brand 品牌对象
* @return成功或失败
*/
@RequestMapping("/update")
public BaseResponse update(@RequestBody TbBrand brand);
/**
* 多项品牌数据删除
* @param ids 品牌id数组
* @return成功或失败
*/
@RequestMapping("/delete")
public BaseResponse delete(@RequestParam("ids") Long[] ids);
}
我们可以理解为就是⼀个controller,可以根据需求提供REST风格的api 2.商品服务API的实现
在pinyougou-sellergoods-service模块中实现API接⼝
@RestController
public class BrandApiServiceImpl extends BaseApiService implements BrandApiService {    @Autowired
private IBrandService brandService;
@Override
public BaseResponse selectOptionList() {
List<Map> mapResult = brandService.selectOptionList();
return setResultSuccess(mapResult);
}
@Override
public BaseResponse search(TbBrand brand, int page, int size) {
PageResult pageResult = brandService.findPage(brand, page, size);
return setResultSuccess(pageResult);
}
@Override
public BaseResponse findPage(int page, int size) {
PageResult pageResult = brandService.findPage(page, size);
return setResultSuccess(pageResult);
}
@Override
public BaseResponse findAll() {
List<TbBrand> listResult = brandService.findAll();
return setResultSuccess(listResult);
}
@Override
public BaseResponse add(TbBrand brand) {
try{
int result=brandService.add(brand);
if(result>0){
return setResultSuccess(result);
}
return setResultError();
}catch (Exception e){
return setResultError();
}
}
@Override
public BaseResponse findOne(Long id) {
TbBrand result = brandService.findOne(id);
return setResultSuccess(result);
}
@Override
public BaseResponse update(TbBrand brand) {
try{
int result = brandService.update(brand);
if(result>0){
return setResultSuccess(result);
}
return setResultError();
}catch (Exception e){
return setResultError();
}
}
@Override
public BaseResponse delete(Long[] ids) {
try{
int result = brandService.delete(ids);
if (result==ids.length && result>0){
return setResultSuccess(result);
}
return setResultError(result);
}catch (Exception e){
return setResultError();
}
}
}
以上的两部分代码,我们可以理解为:该两部分组成⼀个controller。
⼆、运营商管理后台
1、调⽤服务
在pinyougou-manager-web项⽬中,创建包feign,并创建⼀个BrandFeign,⽤于调⽤商品服务接⼝
@FeignClient(value = "sellergoods") //写service层的名称
public interface BrandFeign extends BrandApiService {
}
使⽤FeignClient调⽤接⼝
在BrandFeign接⼝类中继承商品服务提供的接⼝类,相当于可以使⽤BrandFeign 调⽤所有提供的商品服务。
2.使⽤服务
接着创建⼀个BrandController,进⾏服务的调⽤
@RestController
@RequestMapping("/brands")
public class BrandController extends BaseApiService {
@Autowired
private BrandFeign brandFeign;
@RequestMapping("/selectOptionList")
@CrossOrigin
public BaseResponse selectOptionList() {
Object object=brandFeign.selectOptionList();
String json=new JSONObject().toJSONString(object);
BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
return result;
}
@RequestMapping("/search")
public BaseResponse search(@RequestBody TbBrand brand, @RequestParam("page") int page, @RequestParam("size") int size) {        Object object= brandFeign.search(brand, page, size);
String json=new JSONObject().toJSONString(object);
BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
return result;
}
@RequestMapping("/findPage")
public BaseResponse findPage(int page, int size) {
Object object= brandFeign.findPage(page, size);
String json=new JSONObject().toJSONString(object);
BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
return result;
}
@RequestMapping("/findAll")
public BaseResponse findAll() {
Object object= brandFeign.findAll();
String json=new JSONObject().toJSONString(object);
BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
return result;
}
@RequestMapping("/add")
public BaseResponse add(TbBrand brand) {
Object object= brandFeign.add(brand);
String json=new JSONObject().toJSONString(object);
BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
return result;
}
@RequestMapping("/findOne")
public BaseResponse findOne(Long id) {
Object object= brandFeign.findOne(id);
String json=new JSONObject().toJSONString(object);
BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
return result;
}
springboot框架是干嘛的
@RequestMapping("/update")
public BaseResponse update(TbBrand brand) {
Object object= brandFeign.update(brand);
String json=new JSONObject().toJSONString(object);
BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
return result;
}
@RequestMapping("/delete")
public BaseResponse delete(Long[] ids) {
Object object= brandFeign.delete(ids);
String json=new JSONObject().toJSONString(object);
BaseResponse result=new JSONObject().parseObject(json,BaseResponse.class);
return result;
}
}
到此,我们的项⽬代码已经全部完成,但是,我们在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项⽬
浏览器输⼊地址:
如果能返回数据,说明我们成功了,感觉有点⼩激动啊。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。