使用Feign做远程调用的注意点
程序员文章站
2022-07-15 13:02:50
...
在使用feign的过程中遇到了一些问题,所以在这里做以下总结
1.定义的做远程调用的api接口中的方法参数列表中的参数都必须都要打上@RequestParam(“value”) 注解**,否则调用会报405异常,这一点是和controller中不一样的,controller中的方法只要参数名和前台传入的参数键名对应上就能自动绑定上参数
复杂类型用必须打上@RequestBody注解
2.service微服务中的Controller的参数绑定:
如果参数列表中有复杂类型,请使用Post请求,使用Get请求会报Bad Request错误,且需要打上@RequestBody注解,而普通基本类型可以不用打上@RequestParam注解可自动绑定参数
如有其它问题,也欢迎补充,放一下代码:
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微服务
@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);
}
}