SpringCloud中的Feign遠程調(diào)用接口傳參失敗問題
Feign遠程調(diào)用接口傳參失敗
我在做一個微服務(wù)調(diào)用的時候出現(xiàn)了被調(diào)接口傳參失敗問題
Feign是通過http協(xié)議調(diào)用服務(wù)的,后來發(fā)現(xiàn)是因為Gep和Maping不一致,還有使用feign時要記得給實體類加無參構(gòu)造注解
同時這些注解都盡量一致,不然微服務(wù)調(diào)bug很麻煩。
這是調(diào)用者

這是feign的client

這是被調(diào)者


Feign遠程調(diào)用的注意點
在使用feign的過程中遇到了一些問題,所以在這里做以下總結(jié):
定義的做遠程調(diào)用的api接口
中的方法參數(shù)列表中的參數(shù)都必須都要打上@RequestParam(“value”) 注解**,否則調(diào)用會報405異常,這一點是和controller中不一樣的,controller中的方法只要參數(shù)名和前臺傳入的參數(shù)鍵名對應(yīng)上就能自動綁定上參數(shù)
復(fù)雜類型用必須打上@RequestBody注解
service微服務(wù)中的Controller的參數(shù)綁定
如果參數(shù)列表中有復(fù)雜類型,請使用Post請求,使用Get請求會報Bad Request錯誤,且需要打上@RequestBody注解,而普通基本類型可以不用打上@RequestParam注解可自動綁定參數(shù)
如有其它問題,也歡迎補充,放一下代碼:
api:
@FeignClient("MS-ADMIN-SERVICE")
public interface FixFeignService {
? ? @GetMapping("/fix")
? ? public List<FixInfo> findAll();
? ? @PostMapping("/fix/add")
? ? public int insert(@RequestBody FixInfo fixInfo);
? ? @PostMapping("/fix/limitByParam")
? ? public LayUIPageBean limitByParam(@RequestBody FixInfo fixInfo, @RequestParam("page") Integer page, @RequestParam("limit") Integer limit);
? ? @PostMapping("/fix/delByIds")
? ? public boolean delByIds(@RequestParam("ids[]") Long[] ids);
? ? @GetMapping("/fix/findById")
? ? public FixInfo findById(@RequestParam("id") Long id);
? ? @PostMapping("/fix/update")
? ? boolean update(@RequestBody FixInfo fixInfo);
}service微服務(wù)
@RestController
@RequestMapping("/fix")
@Slf4j
public class FixInfoController {
? ? @Autowired
? ? private FixInfoService fixInfoService;
? ? @GetMapping("")
? ? public List<FixInfo> findAll(){
? ? ? ? List<FixInfo> all = fixInfoService.findAll();
? ? ? ? return all;
? ? }
? ? @PostMapping("/add")
? ? public int insert(@RequestBody FixInfo fixInfo){
? ? ? ? return fixInfoService.insert(fixInfo);
? ? }
? ? @PostMapping("/limitByParam")
? ? public LayUIPageBean limitByParam(@RequestBody FixInfo fixInfo,Integer page,Integer limit){
? ? ? ? LayUIPageBean layUIPageBean = new LayUIPageBean();
? ? ? ? PageHelper.startPage(page,limit);
? ? ? ? List<FixInfo> all = fixInfoService.findByParam(fixInfo);
? ? ? ? PageInfo<FixInfo> pageInfo = new PageInfo<>(all);
? ? ? ? return layUIPageBean.setCount((int)pageInfo.getTotal()).setData(pageInfo.getList());
? ? }
? ? @PostMapping("/delByIds")
? ? public boolean delByIds(@RequestParam("ids[]") Long[] ids){
? ? ? ? //log.info("id"+ids[0]);
? ? ? ? boolean flag= fixInfoService.delByIds(ids);
? ? ? ? return flag;
? ? }
? ? @GetMapping("/findById")
? ? public FixInfo findById(Long id){
? ? ? ? return fixInfoService.findById(id);
? ? }
? ? @PostMapping("/update")
? ? public boolean update(@RequestBody FixInfo fixInfo){
? ? ? ?return fixInfoService.update(fixInfo);
? ? }
}以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Hibernate使用hbm.xml配置映射關(guān)系解析
這篇文章主要介紹了Hibernate使用hbm.xml配置映射關(guān)系解析,具有一定參考價值,需要的朋友可以了解下。2017-11-11
Spring Date jpa 獲取最新一條數(shù)據(jù)的實例代碼
這篇文章主要介紹了Spring Date jpa 獲取最新一條數(shù)據(jù)的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10

