dubbo项目中使用SpringMVC做文件上传,对于使用MultipartFile文件传输时,报错Fail to decode request due to: RpcInvocation。

错误消息:
|严重: Servlet.service() for servlet [taotao-manager-web] in context with path [] threw exception [Request processing failed; nested exception is com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method uploadPicture in the service com.taotao.manager.service.PictureService. Tried 3 times of the providers [192.168.138.1:20880] (1/1) from the registry 192.168.138.128:2181 on the consumer 192.168.138.1 using the dubbo version 2.5.3. Last error is: Failed to invoke remote method: uploadPicture, provider: dubbo://192.168.138.1:20880/com.taotao.manager.service.PictureService?anyhost=true&application=taotao-manager-web&check=false&dubbo=2.5.3&interface=com.taotao.manager.service.PictureService&methods=uploadPicture&pid=20660&revision=1.0-SNAPSHOT&side=consumer&timeout=1000000×tamp=1553236601190, cause: Fail to decode request due to: RpcInvocation [methodName=uploadPicture, parameterTypes=null, arguments=null, attachments={path=com.taotao.manager.service.PictureService, input=883, dubbo=2.5.3, version=0.0.0}]] with root cause com.alibaba.dubbo.remoting.RemotingException: Fail to decode request due to: RpcInvocation [methodName=uploadPicture, parameterTypes=null, arguments=null, attachments={path=com.taotao.manager.service.PictureService, input=883, dubbo=2.5.3, version=0.0.0}]

出错原因
查看MultipartFile的源码发现,这东西是一个接口,其实传进来的是他的一个commons实现类而已,dubbo明显不能跨系统传递这个对象,所以会一直报invoke method 错误。百度了一下,发现网上一个大神的解决办法使用Hessian。

问题解决
1.在pom文件中添加添加如下配置(注意jetty包中要排除servlet-api包依赖,不然Tomct不能正常启动。)

dubbo项目中使用SpringMVC做文件上传,对于使用MultipartFile文件传输时,报错Fail to decode request due to: RpcInvocation。_第1张图片

*2.*在springmvc配置文件中添加文件上传配置


	
	
	
	

3在provider(服务提供方)将需要的服务注册成hessian。
:使用dubbo中的hessian在端口20887暴露服务
:声明需要暴露的服务
dubbo项目中使用SpringMVC做文件上传,对于使用MultipartFile文件传输时,报错Fail to decode request due to: RpcInvocation。_第2张图片
dubbo项目中使用SpringMVC做文件上传,对于使用MultipartFile文件传输时,报错Fail to decode request due to: RpcInvocation。_第3张图片
4在consumer(消费方)注册

dubbo项目中使用SpringMVC做文件上传,对于使用MultipartFile文件传输时,报错Fail to decode request due to: RpcInvocation。_第4张图片
5用byte数组来传递这个InputStream。
1.在Controller层把上传的文件转成二进制数组,并传递到servicec层
dubbo项目中使用SpringMVC做文件上传,对于使用MultipartFile文件传输时,报错Fail to decode request due to: RpcInvocation。_第5张图片
2.service层
dubbo项目中使用SpringMVC做文件上传,对于使用MultipartFile文件传输时,报错Fail to decode request due to: RpcInvocation。_第6张图片
效果展示
dubbo项目中使用SpringMVC做文件上传,对于使用MultipartFile文件传输时,报错Fail to decode request due to: RpcInvocation。_第7张图片

你可能感兴趣的:(springMVC)