spring-cloud-feign 使用@RequetParam报错QueryMap parameter must be a Map: class java.lang.String

使用spring-cloud-feign时遇到@RequetParam报错,解析错误原因及提供解决方案。spring-cloud-feign处理@RequestParam的方式与Springmvc不同,当@RequestParam的value为空时,会导致参数被误认为Map类型。

spring-cloud-feign 使用@RequetParam报错QueryMap parameter must be a Map: class java.lang.String

这里使用spring-cloud-start-feign: 1.2.6 REALEASE版本,依赖管理器版本是 Camden.SR6

 

出错的原因是@RequestParam的value为empty时,参数会被当作Map来处理

org.springframework.cloud.netflix.feign.annotation.RequestParamParameterProcessor
代码如下:
    @Override
	public boolean processArgument(AnnotatedParameterContext context,
			Annotation annotation) {
		RequestParam requestParam = ANNOTATION.cast(annotation);
		String name = requestParam.value();
		if (emptyToNull(name) != null) {
			context.setParameterName(name);

			MethodMetadata data = context.getMethodMetadata();
			Collection<String> query = context.setTemplateParameter(name,
					data.template().queries().get(name));
			data.template().query(name, query);
		} else {
			// supports `Map` types
			MethodMetadata data = context.getMethodMetadata();
			data.queryMapIndex(context.getParameterIndex());
		}
		return true;
	}    

  

说明spring-cloud-feign处理@RequestParam和Spring mvc的不一样,Spring mvc在@RequestParam的value为空的时候反射得到参数的名字作为value

 

解决方案: 给@RequestParam加上value

转载于:https://www.cnblogs.com/liukedong/p/8580971.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值