場景:
通常會通過控制層(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註解。