场景:
通常会通过控制层(Controller)给业务层(Service)发送数据,而在分布式项目中,服务调用者一个项目,服务提供者也是一个项目,则会在调用者中通过Feign发送请求给服务,如下:
@FeignClient(value = "service-demo", fallback = TbItemServiceHystrix.class)
public interface TbItemService {
/**
* 远程调用service-demo服务里save方法
* @param tbItem 封装了插入信息1的对象
* @param desc 保存插入信息2的字符串对象
* @return 结果记录的id
*/
@RequestMapping("/item/save")
Long saveTbItem(@RequestBody TbItem tbItem, @RequestParam("desc") String desc);
}
服务提供者
//服务提供者的某控制器中
@RestController
public class ItemController {
@Autowired
private IItemService itemService;
@PostMapping(value="/item/save")
public Long save(@RequestBody TbItem item, String desc) {
try {
Long itemId = itemService.saveItem(item, desc);
return itemId;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
注意:上面使用@RequestBody注解,该注解以json格式接收数据,并且把数据封装到TbItem对象中。另外,由于使用Feign发送Get请求时候无法传递对象类型参数,因为它会自动转换成post请求方式,因此服务提供者需要使用Post方式接收参数。为了能够接收item参数,服务提供者不能使用@GetMapping,而要使用@PostMapping注解。