SpringCloud分布式项目中使用Feign发送请求注意事项

场景:

通常会通过控制层(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注解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章