這裏使用spring-cloud-start-feign: 1.2.6 REALEASE版本,依賴管理器版本是 Camden.SR6html
出錯的緣由是@RequestParam的value爲empty時,參數會被看成Map來處理java
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爲空的時候反射獲得參數的名字做爲valuespring
解決方案: 給@RequestParam加上valuemvc