SpringCloud FeignClient调用返回结果为null。

本文介绍了在SpringCloud中使用FeignClient调用远程服务时遇到返回结果为null的问题。通过分析和尝试,发现原因可能在于请求头参数设置不正确。通过在FeignClient接口中添加`produces = MediaType.APPLICATION_JSON_UTF8_VALUE`,确保Http请求返回类型为`application/json;charset=UTF-8`,从而成功解决问题。

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

SpringCloud FeignClient调用返回结果为null。

(1)远端服务如下:
@ApiOperation("[+]获取系统所有的项目")
@RequestMapping(value="/all", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public AppResponse<List> all() {

	// 1、分步查询,先查出所有项目
	// 2、再查询这些项目图片
	List<ProjectVo> prosVo = new ArrayList<>();

	// 1、连接查询,所有的项目left join 图片表,查出所有的图片
	// left join:笛卡尔积 A*B 1000万*6 = 6000万
	// 大表禁止连接查询;
	List<TProject> pros = projectInfoService.getAllProjects();

	for (TProject tProject : pros) {
		Integer id = tProject.getId();
		List<TProjectImages> images = projectInfoService.getProjectImages(id);
		ProjectVo projectVo = new ProjectVo();
		BeanUtils.copyProperties(tProject, projectVo);

		。。。。。。。。。

	return AppResponse.ok(prosVo);
}

(2)FeignClient定义如下:
@FeignClient(value=“SCW-PROJECT”,fallback=ProjectInfoServiseFeignExceptionHandler.class)
public interface ProjectInfoServiseFeign {

@RequestMapping(value="project/all", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public AppResponse<List<ProjectVo>> all();

}

(3)使用FeignClient调用远端服务代码省略。。。
每次返回结果都是null。因为无参,所以不是@RequestParam的问题;
经百度,发现可能是Feign在组装Http请求去调用远端服务时 请求头参数有问题。所以加上【produces = MediaType.APPLICATION_JSON_UTF8_VALUE】。完美解决

总结:consumes定义了方法接受的Http的请求类型,produces则定义了Http请求返回的类型。

FeignClient,它的底层实现,就是根据定义的FeignClient,来组装Http请求进行远程调用,而Http默认的Content-type是x-www-form-urlencoded类型化。

因此,我们可以在FeignClient的定义上,指定produces = MediaType.APPLICATION_JSON_UTF8_VALUE,这样,FeignClient在组装Http请求的时候,就会在header里面设置响应的数据类型为application/json;charset=UTF-8这样,问题就完美解决。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值