Рубрики
Без рубрики

Загрузка файла с открытым притворным

Автор оригинала: baeldung.

1. Обзор

В этом учебнике мы продемонстрируем, как загрузить файл с помощью Open Feign. Feign является мощным инструментом для разработчиков микрослужб для общения через REST API с другими микрослужбами в декларативной манере.

2. Предпосылки

Давайте предположим, что веб-служба RESTful подвергается для загрузки файла, и приведены ниже подробности:

POST http://localhost:8081/upload-file

Таким образом, чтобы объяснить загрузку файла через Симулировать клиента, мы назовем открытый API веб-службы, как показано ниже:

@PostMapping(value = "/upload-file")
public String handleFileUpload(@RequestPart(value = "file") MultipartFile file) {
    // File upload logic
}

3. Зависимости

Для поддерживать приложение/x-www-форма-urlencoded и многопартийные/формоформные данные типы кодирования для загрузки файла, мы должны симулировать основные , симулировать форму , и симулировать-форма-весна Модули.

Таким образом, мы добавим следующие зависимости в Maven:


    io.github.openfeign
    feign-core
    10.12


    io.github.openfeign.form
    feign-form
    3.8.0


    io.github.openfeign.form
    feign-form-spring
    3.8.0

Мы также можем использовать весна-облако-стартер-открытый который имеет симулировать основные внутренне:


    org.springframework.cloud
    spring-cloud-starter-openfeign
    3.0.1

4. Конфигурация

Давайте добавим @EnableFeignClients к нашему основному классу. Вы можете посетить весеннее облако открыто симулировать учебник для более подробной информации:

@SpringBootApplication
@EnableFeignClients
public class ExampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExampleApplication.class, args);
    }
}

@EnableFeignClients аннотация позволяет сканировать компоненты для интерфейсов, которые объявлены симулировать клиентов.

5. Загрузка файлов через Feign Клиента

5.1. Через аннотированного клиента

Давайте создадим необходимый кодер для аннотированного @FeignClient класс:

public class FeignSupportConfig {
    @Bean
    public Encoder multipartFormEncoder() {
        return new SpringFormEncoder(new SpringEncoder(new ObjectFactory() {
            @Override
            public HttpMessageConverters getObject() throws BeansException {
                return new HttpMessageConverters(new RestTemplate().getMessageConverters());
            }
        }));
    }
}

Обратите внимание, что СимулироватьПоддерживайКонфиг не нужно аннотировать с @Configuration.

Теперь давайте создадим интерфейс и аннотировать его с помощью @FeignClient . Мы также добавим имя и конфигурация атрибуты с соответствующими значениями:

@FeignClient(name = "file", url = "http://localhost:8081", configuration = FeignSupportConfig.class)
public interface UploadClient {
    @PostMapping(value = "/upload-file", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    String fileUpload(@RequestPart(value = "file") MultipartFile file);
}

UploadClient указывает на API, упомянутый в предпосылкой .

Во время работы с Хайстрикс , мы будем использовать откат атрибут для добавления в качестве альтернативы. Это делается, когда api загрузки не .

Теперь наши @FeignClient будут выглядеть так:

@FeignClient(name = "file", url = "http://localhost:8081", fallback = UploadFallback.class, configuration = FeignSupportConfig.class)

И, наконец, мы можем UploadClient непосредственно из уровня обслуживания:

public String uploadFile(MultipartFile file) {
    return client.fileUpload(file);
}

5.2. Через Feign.builder

В некоторых случаях, наши притворные клиенты должны быть настроены, что невозможно в аннотации образом, как описано выше. В таком случае мы создаем клиентов, использующих Feign.builder () API.

Давайте построим прокси-интерфейс, содержащий метод загрузки файлов, ориентированный на API REST для загрузки файла:

public interface UploadResource {
    @RequestLine("POST /upload-file")
    @Headers("Content-Type: multipart/form-data")
    Response uploadFile(@Param("file") MultipartFile file);
}

Аннотация @RequestLine определяет метод HTTP и относительный путь ресурсов API и @Headers определяет заготовки, такие как Content-Type.

Теперь давайте вызовем указанный метод в интерфейсе прокси. Мы сделаем это из нашего класса обслуживания:

public boolean uploadFileWithManualClient(MultipartFile file) {
    UploadResource fileUploadResource = Feign.builder().encoder(new SpringFormEncoder())
      .target(UploadResource.class, HTTP_FILE_UPLOAD_URL);
    Response response = fileUploadResource.uploadFile(file);
    return response.status() == 200;
}

Здесь мы использовали Feign.builder () утилита для создания экземпляра UploadResource прокси-интерфейс. Мы также использовали ВеснаФормеЭнкодер и URL-адрес на основе веб-сервиса RESTful.

6. Проверка

Давайте создадим тест для проверки загрузки файла с аннотированным клиентом:

@Test
public void whenAnnotatedFeignClient_thenFileUploadSuccess() {
    ClassLoader classloader = Thread.currentThread().getContextClassLoader();
    File file = new File(classloader.getResource(FILE_NAME).getFile());
    Assert.assertTrue(file.exists());
    FileInputStream input = new FileInputStream(file);
    MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain",
       IOUtils.toByteArray(input));
    String uploadFile = uploadService.uploadFile(multipartFile);
    Assert.assertNotNull(uploadFile);
}

А теперь давайте создадим еще один тест для проверки загрузки файла с помощью Feign.Builder () :

@Test
public void whenFeignBuilder_thenFileUploadSuccess() throws IOException {
    // same as above
    Assert.assertTrue(uploadService.uploadFileWithManualClient(multipartFile));
}

7. Заключение

В этой статье мы показали, как реализовать загрузку Multipart File с помощью OpenFeign, и различные способы включить его в простое приложение.

Мы также видели, как настроить симулировать клиента или использовать Feign.Builder () для того, чтобы выполнить ту же .

Как обычно, все образцы кода, используемые в этом учебнике, доступны более чем на GitHub.