spring-cloud-feign 使用@RequetParam报错QueryMap parameter must be a Map: class java.lang.String
Posted 六月飞雪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于spring-cloud-feign 使用@RequetParam报错QueryMap parameter must be a Map: class java.lang.String的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 multer 从 req 对象访问 req.files