這里使用spring-cloud-start-feign: 1.2.2 REALEASE版本,依賴管理器版本是 Camden.SR2
出錯的原因是@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
