场景:
跨服务调用文件上传接口
技术栈:Feign + nacos
报错:
: Error converting request body
解决方案:
step1:添加pom依赖
<!--这里我使用nacos注册中心,如果没有使用可以不用nacos-discovery-->
<dependency>
<groupId></groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId></groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
step2:添加配置类
import ;
import ;
import ;
import ;
import ;
import ;
import .*;
import ;
@Configuration
public class FeignMultipartSupportConfig {
@Bean
@Primary
@Scope("prototype")
public Encoder multipartFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(new ObjectFactory<HttpMessageConverters>() {
@Override
public HttpMessageConverters getObject() throws BeansException {
return new HttpMessageConverters(new RestTemplate().getMessageConverters());
}
}));
}
@Bean
public multipartLoggerLevel() {
return ;
}
}
step3:编写Feign Client
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
/**
* 注意点
* 1:configuration =
* = MediaType.MULTIPART_FORM_DATA_VALUE
*/
@FeignClient(value = "baseserver",configuration = )
public interface BaseserverClient {
/**
* 文件上传至阿里云
* @param file
* @param imei
* @param sysDictItemId
* @return
*/
@PostMapping(value = "/file/image/uplode", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
JsonResult<String> upload(@RequestPart MultipartFile file);
}
step4:调用
@Api(tags = "植物智能管理", value = "植物库")
@RestController
@RequestMapping("/plant/AI")
@Slf4j
public class PlantAIController {
@Autowired
private BaseserverClient baseserverClient;
@PostMapping("/recognition")
public void test(@RequestPart(value = "file", required = false) MultipartFile file){
(file);
}
}