文件上传Spring Cloud Feign客户端

ZiOS

当使用spring cloud netflix的伪客户端从一个微服务向另一个微服务发出发布请求时,Postman中出现以下错误:

{
"timestamp": 1506933777413,
"status": 500,
"error": "Internal Server Error",
"exception": "feign.codec.EncodeException",
"message": "Could not write JSON: No serializer found for class java.io.FileDescriptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS); nested exception is com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class java.io.FileDescriptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile[\"inputStream\"]->java.io.FileInputStream[\"fd\"])",
"path": "/attachments"
}

我的eclipse控制台显示以下异常:

com.fasterxml.jackson.databind.JsonMappingException:未找到类java.io.FileDescriptor的序列化程序,也未找到创建BeanSerializer的属性(为避免异常,请禁用SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过参考链:org.springframework.web.multipart。 support.StandardMultipartHttpServletRequest $ StandardMultipartFile [“ inputStream”]-> java.io.FileInputStream [“ fd”]),位于com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:284)〜[jackson-databind-2.8。 com.fasterxml.jackson.databind.SerializerProvider.mappingException(SerializerProvider.java:1110)的[jar.2.8.9]〜com.fasterxml.jackson的[jackson-databind-2.8.9.jar:2.8.9]。 databind.SerializerProvider.reportMappingProblem(SerializerProvider.java:1135)〜[jackson-databind-2.8.9.jar:2.8.9]位于com.fasterxml.jackson。databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:69)〜[jackson-databind-2.8.9.jar:2.8.9] at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer .java:32)〜[jackson-databind-2.8.9.jar:2.8.9],位于com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704)〜[jackson-databind-2.8。 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689)的9.jar:2.8.9]〜com的[jackson-databind-2.8.9.jar:2.8.9]。 fastxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155)〜[jackson-databind-2.8.9.jar:2.8.9] at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter .java:704)〜[jackson-databind-2.8.9.jar:2.8.9],位于com.fasterxml.jackson.databind.ser.std.BeanSerializerBase。serializeFields(BeanSerializerBase.java:689)〜[jackson-databind-2.8.9.jar:2.8.9]在com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155)〜[jackson-databind -2.8.9.jar:2.8.9]在com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:292)〜[jackson-databind-2.8.9.jar:2.8.9]在com .fasterxml.jackson.databind.ObjectWriter $ Prefetch.serialize(ObjectWriter.java:1429)〜[jackson-databind-2.8.9.jar:2.8.9]位于com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter。 java:951)〜[jackson-databind-2.8.9.jar:2.8.9]serializeValue(DefaultSerializerProvider.java:292)〜[jackson-databind-2.8.9.jar:2.8.9] at com.fasterxml.jackson.databind.ObjectWriter $ Prefetch.serialize(ObjectWriter.java:1429)〜[jackson-databind -2.8.9.jar:2.8.9],位于com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:951)〜[jackson-databind-2.8.9.jar:2.8.9]serializeValue(DefaultSerializerProvider.java:292)〜[jackson-databind-2.8.9.jar:2.8.9] at com.fasterxml.jackson.databind.ObjectWriter $ Prefetch.serialize(ObjectWriter.java:1429)〜[jackson-databind -2.8.9.jar:2.8.9],位于com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:951)〜[jackson-databind-2.8.9.jar:2.8.9]

更新1

这是我的假装界面:

@FeignClient(name="attachment-service", fallback=AttachmentHystrixFallback.class)
public interface AttachmentFeignClient {

@RequestMapping("upload")
void upload(@RequestPart(name="file") MultipartFile file, @RequestParam(name="attachableId") Long attachableId, 
        @RequestParam(name="className") String className, @RequestParam(name="appName") String appName);

这是主要的微服务控制器:

@RestController
public class AttachmentController implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = -4431842080646836475L;

@Autowired
AttachmentService attachmentService;

@RequestMapping(value = "attachments", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public void upload(@RequestPart MultipartFile file, @RequestParam Long attachableId, @RequestParam String className, @RequestParam String appName) throws Exception {
    attachmentService.uploadFile(file, attachableId, className, appName);
}

}

我肯定在这里缺少某种串行器。
任何建议将不胜感激!
谢谢

马丁·乔林

经过几天的寻找解决方案,我发现了这一点。您应该开始为spring依赖添加伪装形式:

<dependency>
   <groupId>io.github.openfeign.form</groupId>
   <artifactId>feign-form-spring</artifactId>
   <version>3.3.0</version>
</dependency

然后您的假客户需要这个spring表格编码器:

@FeignClient(name="attachment-service",  configuration = {AttachmentFeignClient.MultipartSupportConfig.class}
 fallback=AttachmentHystrixFallback.class)
public interface AttachmentFeignClient {

@RequestMapping(value= {"upload"}, consumes = {"multipart/form-data"})
void upload(@RequestPart(name="file") MultipartFile file, @RequestParam(name="attachableId") Long attachableId, 
        @RequestParam(name="className") String className, @RequestParam(name="appName") String appName);

 public class MultipartSupportConfig {
    @Bean
    @Primary
    @Scope("prototype")
    public Encoder feignFormEncoder() {
        return new SpringFormEncoder();
    }
  }
}

希望对您有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring Cloud Feign客户端可以与Spring Web Controller共享接口吗?

来自分类Dev

在Feign客户端+ Spring Cloud(Brixton RC2)中将@Headers与动态值一起使用

来自分类Dev

java.lang.IllegalStateException:未定义用于loadBalancing的Feign客户端。您是否忘了包含spring-cloud-starter-netflix-ribbon?

来自分类Dev

如何从Cloud Storage Node.js客户端中的URL上传文件

来自分类Dev

在Spring Cloud配置客户端之间共享配置

来自分类Dev

Spring Cloud Stream kafka 客户端异常

来自分类Dev

如何使用服务器上的Node从客户端JavaScript上传到Google Cloud Storage?

来自分类Dev

Firebase Web客户端将JSON上传到Cloud Storage

来自分类Dev

客户端与客户端与Cloud Endpoints的通信

来自分类Dev

客户端与客户端与Cloud Endpoints的通信

来自分类Dev

Spring Cloud Config:启动客户端后如何刷新配置?

来自分类Dev

Spring Cloud Eureka客户端到多个Eureka服务器

来自分类Dev

其他程序语言客户端如何使用Spring Cloud Config Server?

来自分类Dev

如何覆盖Spring Cloud OAuth2客户端自动配置?

来自分类Dev

Spring Cloud Config客户端未从配置服务器加载配置

来自分类Dev

如何在Spring Cloud中从客户端配置多个Eureka服务器

来自分类Dev

Spring Cloud配置客户端未从配置服务器中选择值

来自分类Dev

Spring Cloud Config:客户端不会尝试连接到配置服务器

来自分类Dev

Spring Cloud处理多个并发客户端和服务器

来自分类Dev

在客户端中修改Spring Cloud配置服务器

来自分类Dev

在Spring cloud config客户端调用/env,密码属性显示“portal.db.password=***”

来自分类Dev

带有 Spring Cloud 流的 Kafka 客户端 ID 属性

来自分类常见问题

Firebase Cloud Messaging Java客户端

来自分类Dev

Google Cloud Storage客户端

来自分类Dev

使用cfs文件系统上传客户端文件

来自分类Dev

Spring HTTP客户端

来自分类Dev

在客户端检查文件

来自分类Dev

文件客户端:权限?

来自分类Dev

上传后但仅在获得客户端许可后,才从客户端PC删除文件

Related 相关文章

  1. 1

    Spring Cloud Feign客户端可以与Spring Web Controller共享接口吗?

  2. 2

    在Feign客户端+ Spring Cloud(Brixton RC2)中将@Headers与动态值一起使用

  3. 3

    java.lang.IllegalStateException:未定义用于loadBalancing的Feign客户端。您是否忘了包含spring-cloud-starter-netflix-ribbon?

  4. 4

    如何从Cloud Storage Node.js客户端中的URL上传文件

  5. 5

    在Spring Cloud配置客户端之间共享配置

  6. 6

    Spring Cloud Stream kafka 客户端异常

  7. 7

    如何使用服务器上的Node从客户端JavaScript上传到Google Cloud Storage?

  8. 8

    Firebase Web客户端将JSON上传到Cloud Storage

  9. 9

    客户端与客户端与Cloud Endpoints的通信

  10. 10

    客户端与客户端与Cloud Endpoints的通信

  11. 11

    Spring Cloud Config:启动客户端后如何刷新配置?

  12. 12

    Spring Cloud Eureka客户端到多个Eureka服务器

  13. 13

    其他程序语言客户端如何使用Spring Cloud Config Server?

  14. 14

    如何覆盖Spring Cloud OAuth2客户端自动配置?

  15. 15

    Spring Cloud Config客户端未从配置服务器加载配置

  16. 16

    如何在Spring Cloud中从客户端配置多个Eureka服务器

  17. 17

    Spring Cloud配置客户端未从配置服务器中选择值

  18. 18

    Spring Cloud Config:客户端不会尝试连接到配置服务器

  19. 19

    Spring Cloud处理多个并发客户端和服务器

  20. 20

    在客户端中修改Spring Cloud配置服务器

  21. 21

    在Spring cloud config客户端调用/env,密码属性显示“portal.db.password=***”

  22. 22

    带有 Spring Cloud 流的 Kafka 客户端 ID 属性

  23. 23

    Firebase Cloud Messaging Java客户端

  24. 24

    Google Cloud Storage客户端

  25. 25

    使用cfs文件系统上传客户端文件

  26. 26

    Spring HTTP客户端

  27. 27

    在客户端检查文件

  28. 28

    文件客户端:权限?

  29. 29

    上传后但仅在获得客户端许可后,才从客户端PC删除文件

热门标签

归档