Я пытаюсь интегрировать службу загрузки файлов, которая зарегистрирована в инфраструктуре обнаружения Eureka.
Моя служба, скажем, / myfile / upload имеет менее 6 параметров, ниже - YML:
/myfile/upload:
put:
operationId: "uploadUsingPUT"
consumes:
- "multipart/form-data"
produces:
- "*/*"
parameters:
- name: "file"
in: "formData"
required: true
type: "file"
- name: "filename"
in: "formData"
required: true
type: "string"
- name: "path"
in: "formData"
required: true
type: "string"
- name: "header1"
in: "header"
required: true
type: "string"
- name: "header2"
in: "header"
required: false
type: "string"
allowEmptyValue: true
responses:
200:
description: "OK"
400:
description: "Bad Request"
Я создал клиентский интерфейс для этой службы, ниже представлен API, который я создал:
import java.io.File;
import java.util.Map;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
@org.springframework.cloud.netflix.feign.FeignClient(value = "SERVICE-NAME", configuration = {
com.MyConfiguration.class})
public interface UploadControllerAPINew extends ApiClient.Api {
@RequestMapping(value = "/myfile/upload",
method = RequestMethod.PUT,
produces = "*/*",
consumes = "multipart/form-data"
)
FileUploadResponse uploadUsingPUT(@RequestPart("file") File file,
@RequestParam("filename") String filename, @RequestParam("path") String path,
@RequestHeader("header1") String header1,
@RequestHeader("header2") String header2);
@RequestMapping(value = "/myfile/upload",
method = RequestMethod.PUT,
produces = "*/*",
consumes = "multipart/form-data"
)
FileUploadResponse uploadUsingPUT1(@RequestBody Map<String, ?> formParams,
@RequestHeader("header1") String header1,
@RequestHeader("header2") String header2);
@RequestMapping(value = "/myfile/upload",
method = RequestMethod.PUT,
produces = "*/*",
consumes = "multipart/form-data"
)
FileUploadResponse uploadUsingPUT2(@RequestPart("file") byte[] file,
@RequestParam("filename") String filename, @RequestParam("path") String path,
@RequestHeader("header1") String header1,
@RequestHeader("header2") String header2);
}
, чтобы предоставить ему кодировщик, я добавил ниже кодировщик:
@Bean
public Encoder feignEncoder() {
ObjectFactory<HttpMessageConverters> objectFactory = () ->
new HttpMessageConverters(new FormHttpMessageConverter());
// return new SpringEncoder(objectFactory);
return new FormEncoder(new SpringEncoder(objectFactory));
}
Тем не менее я получаю исключения со всеми тремя подходами:
uploadUsingPUT:
Невозможно записать запрос: не найден подходящий HttpMessageConverter для типа запроса [java.io.Файл] и тип содержимого [multipart / form-data]
uploadUsingPUT1:
Невозможно записать запрос: не найден подходящий HttpMessageConverter для типа запроса [java.util.LinkedHashMap] и тип содержимого [multipart / form-data]
uploadUsingPUT2:
Обязательная часть запроса 'file' отсутствует
PLEASEПРЕДЛАГАЕМ