二.服务消费者整合menu
创建新的文件夹
创建服务消费者依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <version>2.0.2.RELEASE</version> </dependency> </dependencies>
创建消费者bootstrap.yml
spring: application: name: client profiles: active: dev cloud: config: uri: http://localhost:8762 fail-fast: true
配置中心创建连接配置(服务消费者)
server: port: 8030 spring: application: name: client thymeleaf: prefix: classpath:/static/ suffix: .html eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-address: true
ClientApplication 启动类 package com.redhat; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
@EnableFeignClients
public class ClientApplication { public static void main(String[] args) { SpringApplication.run(ClientApplication.class,args); } } 测试menu创建feign接口 先把menu里面的Menu类复制到client来创建的entity中 创建feign接口
package com.redhat.feign; import com.redhat.entity.Menu; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import java.util.List; @FeignClient(value = "menu") public interface MenuFeign { @GetMapping("/menu/findAll/{index}/{limit}") public List<Menu> findAll(@PathVariable("index")int index, @PathVariable("limit")int limit); } 创建
package com.redhat.controller; import com.redhat.entity.Menu; import com.redhat.feign.MenuFeign; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/client") public class ClientHandler { @Autowired private MenuFeign menuFeign; @GetMapping("/findAll/{index}/{limit}") public List<Menu>findAll(@PathVariable("index") int index,@PathVariable("limit") int limit ){return menuFeign.findAll(index,limit); } } 启动服务测试功能
下一步在client文件下创建已分享相关前端及配置
链接:https://pan.baidu.com/s/10u21aq60Rzs1AWnizCYpag
提取码:r9va
修改一下clienthandler
package com.redhat.controller; import com.redhat.entity.Menu; import com.redhat.feign.MenuFeign; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @Controller @RequestMapping("/client") public class ClientHandler { @Autowired private MenuFeign menuFeign; @GetMapping("/findAll/{index}/{limit}") public List<Menu>findAll(@PathVariable("index") int index,@PathVariable("limit") int limit ){return menuFeign.findAll(index,limit); } @GetMapping("/redirect/{location}") public String redirect(@PathVariable("location") String location){ return location; } }
把新加的文件重建一下工程加入到目标文件中
重新启动client测试访问
这个框架可以查找Layui官方文档进行了解和学习
调用数据接口再修改clienthandler代码如下
package com.redhat.controller; import com.redhat.entity.Menu; import com.redhat.feign.MenuFeign; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.List; @Controller @RequestMapping("/client") public class ClientHandler { @Autowired private MenuFeign menuFeign; @GetMapping("/findAll") @ResponseBody public List<Menu>findAll(@RequestParam("page") int page, @RequestParam("limit") int limit ){ int index=(page-1)*limit; return menuFeign.findAll(index,limit); } @GetMapping("/redirect/{location}") public String redirect(@PathVariable("location") String location){ return location; } } 下面提示表示返回的值数据已经有了但是数据格式不对,必须返回menu对数据进行封装
封装数据
package com.redhat.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor public class MenuVO { private int code; private String msg; private int count; private List<Menu> data; } 将它复制到client对应位置等待调用
修改client文件下的feign
package com.redhat.feign; import com.redhat.entity.MenuVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @FeignClient(value = "menu") public interface MenuFeign { @GetMapping("/menu/findAll/{index}/{limit}") public MenuVO findAll(@PathVariable("index")int index, @PathVariable("limit")int limit); }
修改client文件下的handler
package com.redhat.controller; import com.redhat.entity.MenuVO; import com.redhat.feign.MenuFeign; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @Controller @RequestMapping("/client") public class ClientHandler { @Autowired private MenuFeign menuFeign; @GetMapping("/findAll") @ResponseBody public MenuVO findAll(@RequestParam("page") int page, @RequestParam("limit") int limit ){ int index=(page-1)*limit; return menuFeign.findAll(index,limit); } @GetMapping("/redirect/{location}") public String redirect(@PathVariable("location") String location){ return location; } } 最后把前端配置修改为
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" th:href="@{/layui/css/layui.css}" media="all"> </head> <body> <div class="layui-container" style="width: 700px;height: 600px;margin-top: 0px;padding-top: 60px;"> <div style="margin-left: 460px; width: 200px;"> 欢迎回来! <button class="layui-btn layui-btn-warm layui-btn-radius">退出</button></a> </div> <table class="layui-hide" id="test" lay-filter="test"></table> <script type="text/html" id="barDemo"> <a class="layui-btn layui-btn-xs" lay-event="order">订购</a> </script> <script th:src="@{/layui/layui.js}" charset="utf-8"></script> <script> layui.use('table', function(){ var table = layui.table; table.render({ elem: '#test' ,url:'/client/findAll' ,title: '菜单列表' ,cols: [ [ {field:'id', width:100, title: '编号', sort: true} ,{field:'name', width:200, title: '菜品'} ,{field:'price', width:100, title: '单价'} ,{field:'flavor', width:100, title: '口味'} ,{field:'tid',width:100, title: '分类',templet:function(data){ return "三鲜" } } ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:70} ] ] ,page: true }); //监听行工具事件 table.on('tool(test)', function(obj){ var data = obj.data; if(obj.event === 'order'){ window.location.href="/order/save/"+data.id; } }); }); </script> </div> </body> </html>
因为复制了封装类所以重建一下工程然后启动各服务
测试如下