SpringCloud中的Feign远程调用接口传参失败问题

网友投稿 468 2022-08-20


SpringCloud中的Feign远程调用接口传参失败问题

目录Feign远程DGbkJefcnv调用接口传参失败这是调用者这是feign的client这是被调者Feign远程调用的注意点定义的做远程调用的api接口service微服务中的Controller的参数绑定

Feign远程调用接口传参失败

我在做一个微服务调用的时候出现了被调接口传参失败问题

Feign是通过http协议调用服务的,后来发现是因为Gep和Maping不一致,还有使用feign时要记得给实体类加无参构造注解

同时这些注解都尽量一致,不然微服务调bug很麻烦。

这是调用者

这是feign的client

这是被调者

Feign远程调用的注意点

在使用feign的过程中遇到了一些问题,所以在这里做以下总结:

定义的做远程调用的api接口

中的方法参数列表中的参数都必须都要打上@RequestParam(“value”) 注解**,否则调用会报405异常,这一点是和controller中不一样的,controller中的方法只要参数名和前台传入的参数键名对应上就能自动绑定上参数

复杂类型用必须打上@RequestBody注解

service微服务中的Controller的参数绑定

如果参数列表中有复杂类型,请使用Post请求,使用Get请求会报Bad Request错误,且需要打上@RequestBody注解,而普通基本类型可以不用打上@RequestParam注解可自动绑定参数

如有其它问题,也欢迎补充,放一下代码:

api:

@FeignClient("MS-ADMIN-SERVICE")

public interface FixFeignService {

@GetMapping("/fix")

public List findAll();

@PostMapping("/fix/add")

public int insert(@RequestBody FixInfo fixInfo);

@PostMapping("/fix/limitByParam")

public LayUIPageBean limitByParam(@RequestBody FixInfo fixInfo, @RequDGbkJefcnvestParam("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 findAll(){

List all = fixInfoService.findAll();

return all;

}

@PostMapping("/add")

public int insert(@RequestBody FixInfo fixInfo){

return fixInfoService.insert(fixInfo);

}

@PostMapping("/limitByParam")

public LayUIPageBean limitByParam(@RequestBody FixInfhttp://o fixInfo,Integer page,Integer limit){

LayUIPageBean layUIPageBean = new LayUIPageBean();

PageHelper.startPage(page,limit);

List all = fixInfoService.findByParam(fixInfo);

PageInfo 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);

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java基础理论Stream的Filter与谓词逻辑
下一篇:java并发编程工具类PriorityBlockingQueue优先级队列
相关文章

 发表评论

暂时没有评论,来抢沙发吧~