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


這里使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM