使用Feign做远程调用的注意点

本文总结了在使用Feign进行远程调用时遇到的问题及解决方案,包括:1. API接口参数需加@RequestParam注解以避免405异常,复杂类型参数需用@RequestBody;2. 服务内部Controller中,复杂类型参数需配合Post请求和@RequestBody注解,基础类型参数可自动绑定。分享相关代码示例以供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Feign的使用的注意点

在使用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);
    }


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值