我需要通过自己的后端服务将MultipartFile上传到第三方服务。分段形式的参数为“ nameA”,但第三方服务需要其参数名称为“ nameB”。
通常我可以通过两种方式解决它:
但是我现在不能更改前端,因此我想指出如何在后端服务中修改MultipartFile的参数名称。
后端服务的控制者是:
@PostMapping("/url")
public Response method(@RequestParam("nameA") MultipartFile file) {
return Service.method(file);
}
在Feign Client中用于将文件上传到第三方服务:
@PostMapping(value = "/url1/url2", consumes = MULTIPART_FORM_DATA_VALUE)
Response method(@RequestParam("nameB") MultipartFile file);
但是,在@RequestParam中使用指定参数的方法无效。
那么有人知道如何修改MultipartFile的参数名称吗?非常感谢!
答案 0 :(得分:0)
这与您的控制器的Spring注释完全无关,而是取决于您如何将该文件上传到第三方服务。既然您提到了上传,我假设您需要在后端服务中创建一个新的HTTP多部分请求,该请求会将文件上传到第三方服务。创建该请求时,您将能够指定多部分的名称。
答案 1 :(得分:0)
您可以根据需要在FeignClient中设置MultipartFile的名称,这是我的项目中的示例:
ontroller API(接收方):
@RestController
@RequestMapping("/files")
public class FilesController {
@PostMapping(path = "/upload")
@ResponseStatus(HttpStatus.CREATED)
public FileDescriptor upload(@RequestPart(value = "data") MultipartFile multipartFile) {
...
}
}
假冒客户(发送方):
@FeignClient(value = "file-service", configuration = FeignConfig.class)
public interface ContentStorageFeign {
@ResponseBody
@PostMapping(value = "/files/upload", produces = MediaType.APPLICATION_JSON_VALUE)
FileDescriptor create(@RequestPart(value = "data") MultipartFile multipartFile);
}
这是我的FeignConfig:
@Configuration
public class FeignConfig {
@Bean
public Decoder decoder(ObjectFactory<HttpMessageConverters> messageConverters) {
return new ResponseEntityDecoder(new SpringDecoder(messageConverters));
}
@Bean
public Encoder encoder(ObjectFactory<HttpMessageConverters> messageConverters) {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
但是如果您需要创建一个新请求(从某处收到的文件)并在发送之前重命名此文件,这是另一个问题。