springcloud feign 调用服务上传文件时出现问题

报错
There was an unexpected error (type=Internal Server Error, status=500).
Type definition error: [simple type, class java.io.FileDescriptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 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: java.util.Collections$SingletonMap["file"]->org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile["inputStream"]->java.io.FileInputStream["fd"])

  • feign.codec.EncodeException: Type definition error: [simple type, class java.io.FileDescriptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 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: java.util.Collections$SingletonMap["file"]->org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile["inputStream"]->java.io.FileInputStream["fd"]) at feign.ReflectiveFeign$BuildEncodedTemplateFromArgs.resolve(ReflectiveFeign.java:376) at feign.ReflectiveFeign$BuildTemplateByResolvingArgs.create(ReflectiveFeign.java:224) at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:74) at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103) at com.sun.proxy.$Proxy195.upimagefile(Unknown Source) at com.xieyang.xyonlineeducationprovide.web.UserController.upheadimage(UserController.java:162) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at ```
服务端的代码
   @Autowired
    private ossFileService oss;

    @RequestMapping("/upimagefile")
    public void upimagefile(@RequestPart MultipartFile file) {
        String upfile = oss.upfile(file);
        if(StringUtils.equals(upfile,"error")){
            System.out.println("上传图片失败");
        }
        else {
            System.out.println("成功上传图片");
        }

    }

客户端的代码
@FeignClient(value = "ALIYUNFILE",configuration=aliyunFileFeign.Myconfig.class )
public interface aliyunFileFeign {
@Headers("Content-Type:multipart/form-data")
@RequestMapping(value = "/upimagefile", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public void upimagefile(@RequestPart MultipartFile file);

@Configuration
public class Myconfig{
    @Autowired
    private ObjectFactory<HttpMessageConverters> messageConverters;

    @Scope("prototype")
    @Primary
    @Bean
    public Encoder feignFormecoder(){
        return new SpringFormEncoder(new SpringEncoder(messageConverters));
    }

    @Bean
    public feign.Logger.Level multipartLoggerLevel(){
        return Logger.Level.FULL;
    }
}

}



springboot为2.1.9  
这是jackson的依赖版本
                <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.10</version>
                        </dependency>

在@RequestMapping注解中添加 consumes = MediaType.MULTIPART_FORM_DATA_VALUE配置项即可解决
如:
@RequestMapping(value = "/uploadFile",method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)