zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    软件工程评分表
    评论
    团队成员介绍
    第九天冲刺
    第八天冲刺
    第七天冲刺
    第六天冲刺
    第五天冲刺
    第四天冲刺
    第三天冲刺
  • 原文地址:https://www.cnblogs.com/lanhj/p/6083960.html
Copyright © 2011-2022 走看看