赞
踩
<!-- OpenFeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@SpringBootApplication
@EnableFeignClients //开启OpenFeign组件的使用
public class OrderServerApplication1020 {
public static void main(String[] args) {
SpringApplication.run(OrderServerApplication1020.class);
}
}
@FeignClient(value = "user-server")
public interface UserClient {
//Restful方式
//调用目标服务的controller的方法,和UseController中的方法路径保持一致
@GetMapping("/user/{id}")
User getById(@PathVariable Long id);
}
//用户服务
@RestController
@Slf4j
public class UserController {
@GetMapping("/product/findAll")
public Map<String,Object> findAll(){
log.info("商品服务查询所有调用成功,当前服务端口:[{}]",port);
Map<String, Object> map = new HashMap<>();
map.put("msg","服务调用成功,服务提供端口为: "+port);
map.put("status",true);
return map;
}
}
@FeignClient(value = "user-server")
public interface UserClient {
//第一种:无参
@GetMapping("/product/findAll")
public Map<String,Object> findAll();
}
//订单服务
@RestController
@Slf4j
public class OrderController {
@Autowired
private UserClient userClient;
//第一种:无参
@GetMapping("/feign/findAll")
public Map<String,Object> test2() {
log.info("进入测试feign调用的方法...");
Map<String, Object> map = userClient.findAll();
log.info("调用商品服务返回的信息:[{}]", map);
return map;
}
}
//Get传参测试
@GetMapping("/product/findOne")
public Map<String,Object> findOne(@RequestParam("productId") String productId) throws Exception {
log.info("商品服务,接收到的商品id为:[{}]",productId);
Map<String, Object> map = new HashMap<>();
//Thread.sleep(2000);
map.put("productdId",productId);
map.put("msg","根据商品id查询商品信息成功!");
map.put("status",true);
map.put("port", port);
return map;
}
//根据商品id查询商品信息
@GetMapping("/product/findOne")
//注意使用openfeign 的GET方式传递参数 参数变量必须通过@RequestParam注解进行修饰
Map<String,Object> findOne(@RequestParam("productId") String productId);
//测试参数GET方式调用传参
@GetMapping("/feign/findOne")
public Map<String,Object> test3(String id ){
log.info("进入测试feign的GET方式传递参数...");
Map<String, Object> map = userClient.findOne(id);
log.info("调用商品服务返回的信息:[{}]",map);
return map;
}
@PostMapping("/product/save")
public Map<String,Object> save(@RequestParam("name") String name){
log.info("商品服务,接收到的商品name为:[{}]",name);
Map<String, Object> map = new HashMap<>();
map.put("name",name);
map.put("msg","添加商品信息成功!");
map.put("status",true);
map.put("port", port);
return map;
}
//注意使用openfeign 的Post方式传递参数 参数变量必须通过@RequestParam注解进行修饰
@PostMapping("/product/save")
Map<String,Object> save(@RequestParam("name") String name);
//1. 传递普通键值对参数
@GetMapping("/feign/save")
public Map<String,Object> test4(String name){
log.info("进入测试feign的Post方式传递参数...");
Map<String, Object> map = userClient.save(name);
log.info("调用商品服务返回的信息:[{}]",map);
return map;
}
//使用openfeign的post方式传递对象信息
//要求服务提供方和服务调用方都是用@RequestBody 进行参数声明
//注意:服务提供方和调用方一定要加入@RequestBody注解
@PostMapping("/product/update")
//@RequestBody 将JSON格式对象转为对应的对象信息
public Map<String,Object> update(@RequestBody User user){
log.info("商品服务,接收到的商品name为:[{}]",user);
Map<String, Object> map = new HashMap<>();
map.put("product",user);
map.put("msg","添加商品信息成功!");
map.put("status",true);
map.put("port", port);
return map;
}
@PostMapping("/product/update")
//2.传递对象类型参数
//使用openfeign的post方式传递对象信息
//要求服务提供方和服务调用方都是用@RequestBody 进行参数声明
//注意:服务提供方和调用方一定要加入@RequestBody注解
Map<String,Object> update(@RequestBody User user);
//2.传递对象类型参数
//测试参数post方式对象的参数传递
@GetMapping("/feign/update")
public Map<String,Object> test5(User user){
log.info("接收的商品信息:[{}]",user);
Map<String, Object> map = userClient.update(user);
log.info("调用商品服务返回的信息:[{}]",map);
return map;
}
接口方法定义方式 资源Restful方式,参数需要使用@PathVariable注解; 使用GET方式:参数使用@RequestParam注解; 使用POST方式: 普通参数使用@RequestParam注解; 自定义对象参数使用@RequestBody注解,否则无法传递对象信息,传递过来的对象是无内容的,属性值都是NULL值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。