在上篇文章的基础上我们来介绍下Feign的请求参数的问题
Feign参数处理
一、单个参数
首先来看下单个参数的情况
1.service服务
在service服务中我们增加一个接收单个参数的方法
代码语言:javascript复制@RequestMapping("/product")
public interface ProductService {
/**
* 查询所有商品的方法
* @return
*/
@GetMapping("/findAll")
public List<Product> findAll();
/**
* 根据id查询商品信息
* Feign本身也是基于http请求的客户端
* 在接收参数时我们需要通过@RequestParam注解来指明要接收的参数
* @param id
* @return
*/
@GetMapping("/getProductById")
public Product getProductById(@RequestParam("id") Integer id);
}
注意:记得重新打包更新
2.provider服务
因为service服务的定义修改了,所以我们需要增加provider的服务,
代码语言:javascript复制/**
* @program: springcloud-feign-product-provider
* @description: 服务提供者的控制器
* @author: 波波烤鸭
* @create: 2019-06-07 09:44
*/
@RestController
public class ProductController implements ProductService{
/**
* 此处不用再添加@RequestMapping注解,重写的方法在接口中定义的有
* @return
*/
@Override
public List<Product> findAll() {
List<Product> list = new ArrayList<>();
list.add(new Product(1, "电视"));
list.add(new Product(2, "电脑"));
list.add(new Product(3, "冰箱"));
list.add(new Product(4, "洗衣机"));
return list;
}
/**
* 单个参数的处理
* @param s
* @return
*/
@Override
public Product getProductById(Integer id) {
return new Product(id,"bobo烤鸭-feign");
}
}
3.consumer服务
消费者中直接通过feign调用服务即可。
代码语言:javascript复制/**
* @program: springcloud-feign-prodcut-consumer
* @description: 消费者提供服务
* @author: 波波烤鸭
* @create: 2019-06-07 10:47
*/
@RestController
public class ProductController {
@Autowired
ProductConsumerService consumerService;
/**
* Consumer 中的查询所有商品的方法
* @return
*/
@RequestMapping(value="/list",method= RequestMethod.GET)
public List<Product> getAll(){
return this.consumerService.findAll();
}
@RequestMapping(value="/get",method= RequestMethod.GET)
public Product getProductById(@RequestParam("id") Integer id){
return this.consumerService.getProductById(id);
}
}
启动服务访问:
调用成功!
二、多个参数
1.GET方式
service服务
代码语言:javascript复制 /**
* GET方式
* 获取多个参数
* 注意:GET方式 形参必须多个分开
* @param id
* @param name
* @return
*/
@GetMapping("/addProductGet")
public Product addProductGet(@RequestParam("id") Integer id,@RequestParam("name") String name);
provider服务
代码语言:javascript复制@Override
public Product addProductGet(Integer id, String name) {
return new Product(id,name);
}
consumer服务
代码语言:javascript复制 @RequestMapping(value="/get1",method= RequestMethod.GET)
public Product addProductGet(Product product){
return this.consumerService.addProductGet(product.getId(),product.getName());
}
2.POST方式
service服务
代码语言:javascript复制/**
* Post方式
* 获取多个参数:@RequestBody
* @param product
* @return
*/
@PostMapping("/addProductPost")
public Product addProductPost(@RequestBody Product product);
provider服务
代码语言:javascript复制@Override
public Product addProductPost(@RequestBody Product product) {
return product;
}
consumer服务
代码语言:javascript复制@RequestMapping(value="/get2",method= RequestMethod.GET)
public Product addProductPost(Product product){
return this.consumerService.addProductPost(product);
}
搞定~