Я пытаюсь прикрепить файл для отправки к конечной точке как MultipartFile
, но получаю следующее исключение:
Expected no exception to be thrown, but got 'feign.codec.EncodeException'
//...
Caused by: feign.codec.EncodeException: Could not write request:
no suitable HttpMessageConverter found for request type [java.util.LinkedHashMap]
and content type [multipart/form-data]
Мой метод:
//...
final User user
//...
@Override
DocumentResponse attachDocument(File file, String userId, String documentId) {
String timestamp = String.valueOf(System.currentTimeMillis())
String url = "${myProperties.apiUrl}/documents/attach?ts=${timestamp}"
String digest = myJWT.sign(HttpMethod.POST, url)
MultipartFile multiFile = new MockMultipartFile("test.xml",
new FileInputStream(file))
DocumentResponse documentResponse = user.attachDocument(multiFile,
userId, documentId, timestamp, digest)
return documentResponse
}
Мой интерфейс:
@FeignClient(name = 'myUser', url = '${apiUrl}', configuration = myConfiguration)
interface User {
//...
@PostMapping(value = '/documents/attach', consumes = 'multipart/form-data')
DocumentResponse attachDocument(@PathVariable('file') MultipartFile multiFile,
@PathVariable('clientId') String userId,
@PathVariable('documentId') String documentId,
@RequestParam('ts') String timestamp,
@RequestParam('digest') String digest)
}
И мой файл конфигурации:
@Slf4j
@Configuration
class myConfiguration {
@Bean
Retryer feignRetryer(@Value('${feign.client.config.myUser.period}') Long period,
@Value('${feign.client.config.myUser.maxInterval}') Long maxInterval,
@Value('${feign.client.config.myUser.maxAttempts}') Integer maxAttempts) {
return new Retryer.Default(period, maxInterval, maxAttempts)
}
@Bean
ErrorDecoder errorDecoder() {
return new ErrorDecoder() {
@Override
Exception decode(String methodKey, Response response) {
if (HttpStatus.OK.value() != response.status()) {
FeignException ex = FeignException.errorStatus(methodKey, response)
if (response.status() != HttpStatus.BAD_REQUEST.value()) {
return new RetryableException('getting conflict and retry', new Date(System.currentTimeMillis() + TimeUnit.SECONDS
.toMillis(1)))
}
return new MyDocumentException()
}
}
}
}
}
Также я попытался добавить этот код в файл myConfiguration:
@Bean
Encoder encoder() {
return new FormEncoder()
}
Но у меня есть еще одно исключение:
Cannot cast object 'feign.form.FormEncoder@5fa78e0a'
with class 'feign.form.FormEncoder' to class 'java.beans.Encoder'
Я использую Spring boot '2.0.2.RELEASE'
с:
"io.github.openfeign.form:feign-form:3.4.1",
"io.github.openfeign.form:feign-form-spring:3.4.1",
Я проверил эти сообщения:
Как отправить POST-запрос от Spring cloud Feign
не найден подходящий HttpMessageConverter для типа ответа
Не удалось записать запрос: не найден подходящий HttpMessageConverter для типа запроса и типа контента
Преобразование файла в несколько файлов
Есть предложения?