【问题标题】:How to modify the parameter name of MultipartFile in uploading?上传时如何修改MultipartFile的参数名称?
【发布时间】:2019-03-28 08:10:07
【问题描述】:

我需要通过我自己的后端服务将 MultipartFile 上传到第三方服务。多部分形式的参数是'nameA',但第三方服务需要它的参数名称是'nameB'。

通常我可以通过两种方式解决它:

  1. 将前端的参数名称更改为“nameB”
  2. 在后端服务中将 MultipartFile 的参数名称更改为“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 的参数名称吗?非常感谢!

【问题讨论】:

  • 您可以使用 RequestPart 代替 RequestParam。

标签: java spring multipartform-data spring-cloud-feign


【解决方案1】:

您可以根据需要在 FeignClient 中设置 MultipartFile 的名称,这是我项目中的示例:

Сontroller API(接收方):

@RestController
@RequestMapping("/files")
public class FilesController {    

    @PostMapping(path = "/upload")
    @ResponseStatus(HttpStatus.CREATED)
    public FileDescriptor upload(@RequestPart(value = "data") MultipartFile multipartFile) {
       ...
    }
}

Feign 客户端(发送方):

@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));
    }
}

但是如果你需要创建一个新的请求(从某个地方收到的文件)并在发送之前重命名这个文件,这是另一个问题。

【讨论】:

    【解决方案2】:

    这与您的控制器 spring 注释完全无关,而是取决于您如何将该文件上传到 3rd 方服务。由于您提到上传它,我假设您需要在后端服务中创建一个新的 HTTP 多部分请求,该请求会将文件上传到第 3 方服务。创建该请求时,您将能够指定多部分的名称。

    【讨论】:

    • 您好,我了解到@RequestParam的spring注解是用来过滤不设置的。谢谢,有没有在 feign 客户端创建 http 多部分请求的说明?我之前只是将多部分文件传递给 feign 客户端。
    • 我必须承认,我不知道。我只是在这里猜测...如果它不适合您,请确保您使用的是最新版本的 spring Feign thingy,因为他们在 feign 上的自定义注释存在一些问题:github.com/spring-cloud/spring-cloud-netflix/issues/1201 如果您使用的是最新最好的我会尝试这里提到的简单的伪装方法:stackoverflow.com/questions/31752779/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2021-06-26
    • 2016-06-26
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多