java - Feign : 文件上传配置
问题描述
我找到了一个使用 Feign 上传文件的解决方案,但我的配置会产生另一个问题。我有几个 Feign 客户端,用于客户端服务中使用的不同服务。
现在,当我提交一个简单的表单时,我收到了这个错误:
feign.codec.EncodeException:类 java.util.ArrayList 不是此编码器支持的类型
在我拥有完美运行但不再有效的配置之前,我不知道为什么。
@Component
@RestController
@FeignClient(name = "zuul-server"
,configuration = {ProxyImages.MultipartSupportConfig.class})
@RibbonClient(name = "oauth2-server")
public interface ProxyImages {
class MultipartSupportConfig {
@Bean
@Primary
@Scope("prototype")
public Encoder feignFormEncoder() {
return new SpringFormEncoder();
}
}
@RequestMapping(value = {"oauth2-server/auth/user/avatar"}, consumes = {"multipart/form-data"})
ResponseEntity<String> saveUserAvatar(@RequestPart(name = "file") MultipartFile file);$
}
我不知道为什么不再考虑 MultipartSupportConfig 类。所以我在 MultipartSupportConfig 类中添加了一个@configuration 注解
@Configuration
class MultipartSupportConfig
它再次工作,但现在似乎总是使用这个编码器,我只想将它用于那个代理。我怎样才能做到这一点 ?
这是我使用的依赖项
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.M8</spring-cloud.version>
<joinfaces.version>3.2.4</joinfaces.version>
</properties>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.3.0</version>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
谢谢。
解决方案
问题已解决。
@RestController
@FeignClient(name = "zuul-server")
public interface ProxyImages {
@Configuration
class MultipartSupportConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
@Primary
@Scope("prototype")
public Encoder feignFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
@RequestMapping(value = {"oauth2-server/auth/user/avatar"}, consumes = {"multipart/form-data"})
ResponseEntity<String> saveUserAvatar(@RequestPart(name = "file") MultipartFile file);
}
推荐阅读
- python - Python:如何快速创建仅包含大型 Excel 工作表中特定列的 pandas 数据框?
- xamarin - 更新到 13.1 后,Xamarin.Forms 应用程序在 iOS 上崩溃
- mysql - 如何从表 1 中查询单行和从表 2 中查询多行?
- python-3.x - 在 y_true 变量中查找单个类 1 的 roc/auc/auc-roc 分数
- c++ - C ++:读取文本文件中不确定数量的变量并在struct中修改,然后替换文本文件中的行
- html - Fontawesome SVG 显示白色背景 - 我希望它没有背景
- java - 与 FLAG_LAYOUT_NO_LIMITS 相反
- node.js - 如何在 nodejs 中使用“脚本”
- math - 如何根据采购订单中供应商提供的折扣计算价格?
- react-native - 使用 react-native-webview 加载静态 HTML 内容并向其添加 baseUrl。点击时返回意外的 url