Я пытаюсь загрузить файл на LogicalDOC DMS , но я получаю ошибку 500. Исключение из их журналов (я думаю, они используют apache jax rs
)
Caused by: java.io.IOException: Couldn't determine the boundary from the message!
Я настроил RestTemplate
вот так
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
return mapper;
}
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper());
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));
ResourceHttpMessageConverter resourceHttpMessageConverter = new ResourceHttpMessageConverter();
ByteArrayHttpMessageConverter byteArrayHttpMessageConverter = new ByteArrayHttpMessageConverter();
byteArrayHttpMessageConverter.setSupportedMediaTypes(Arrays.asList(
MediaType.IMAGE_JPEG,
MediaType.IMAGE_GIF,
MediaType.IMAGE_PNG,
MediaType.APPLICATION_OCTET_STREAM,
MediaType.TEXT_XML,
MediaType.TEXT_PLAIN,
MediaType.TEXT_HTML
));
FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
formHttpMessageConverter.setPartConverters(Arrays.asList(
resourceHttpMessageConverter,
byteArrayHttpMessageConverter
));
restTemplate.setMessageConverters(Arrays.asList(
mappingJackson2HttpMessageConverter,
formHttpMessageConverter,
resourceHttpMessageConverter,
byteArrayHttpMessageConverter
));
restTemplate.setErrorHandler(responseErrorHandler());
return restTemplate;
}
И создал service
public DocumentDto upload(Long folderId, String fileName, byte[] file, Long documentId) {
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("folderId", folderId);
params.add("filename", fileName);
params.add("filedata", file);
if (Objects.nonNull(documentId)) {
params.add("docId", documentId);
}
return client.upload("/document/upload", params, DocumentDto.class);
}
И покой client
public <T> T upload(String path, MultiValueMap<String, Object> body, Class<T> clazz) throws RestClientException {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setBasicAuth(username, password);
HttpEntity<MultiValueMap<String, Object>> entity = new HttpEntity<>(body, headers);
return restTemplate.exchange(getUrl(path), HttpMethod.POST, entity, clazz).getBody();
}
И наконец test
... сервисный звонок
service.upload(FOLDER_ID, "application.yml", getDocument(), null);
private byte[] getDocument() {
byte[] file = new byte[]{};
Resource resource = resourceLoader.getResource("classpath:application.yml");
try {
file = StreamUtils.copyToByteArray(resource.getInputStream());
} catch (IOException ex) {
ex.printStackTrace();
}
return file;
}
Так что вы можете мне помочь.Я подозреваю, что я не посылаю правильную информацию о представлении прикрепленного файла.У кого-нибудь была похожая проблема с отправкой файла с Spring RestTemplate
.Я также пытаюсь использовать класс Resource
вместо byte[]
, но получаю ту же ошибку.