Как изменить имя параметра MultipartFile при загрузке? - PullRequest
0 голосов
/ 24 октября 2018

Мне нужно загрузить MultipartFile в сторонний сервис через мой собственный бэкэнд-сервис.Параметр в многочастной форме - «nameA», но стороннему сервису необходимо, чтобы его имя параметра было «nameB».

Обычно я могу решить его двумя способами:

  1. Изменитьимя параметра внешнего интерфейса на «nameB»
  2. Измените имя параметра MultipartFile на «nameB» в бэкэнд-сервисе.

Но я не могу сейчас изменить внешний интерфейс, поэтому я хочуподскажите, как изменить имя параметра MultipartFile в бэкэнд-сервисе.

Контроллер бэкэнд-сервиса:

@PostMapping("/url")
public Response method(@RequestParam("nameA") MultipartFile file) {
    return Service.method(file);
}

В клиенте Feign для загрузки файла в сторонний сервис:

@PostMapping(value = "/url1/url2", consumes = MULTIPART_FORM_DATA_VALUE)
Response method(@RequestParam("nameB") MultipartFile file);

Однако использование указания параметра с помощью ? @RequestParam не работает.

Так кто-нибудь знает, как изменить имя параметра MultipartFile?Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Вы можете установить имя MultipartFile в FeignClient, как вам нужно, это пример из моего проекта:

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

Но если вам нужно создать новый запрос (из файла, полученного откуда-то) и переименовать этот файлперед отправкой это еще одна проблема.

0 голосов
/ 24 октября 2018

Это совершенно не связано с весенними аннотациями ваших контроллеров, а зависит от того, как вы загрузите этот файл в стороннюю службу.Поскольку вы упомянули о его загрузке, я предполагаю, что вам нужно создать новый многокомпонентный HTTP-запрос в бэкэнд-сервисе, который будет загружать файл в сторонний сервис.При создании этого запроса вы сможете указать название составной части.

...