如何做一个api接口?
443
2022-10-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
@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
List
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
PageInfo
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~