Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将带有Spring RestTemplate的文件上载到LogicalDOC_Java_Spring_Jax Rs_Resttemplate_Multipart - Fatal编程技术网

Java 将带有Spring RestTemplate的文件上载到LogicalDOC

Java 将带有Spring RestTemplate的文件上载到LogicalDOC,java,spring,jax-rs,resttemplate,multipart,Java,Spring,Jax Rs,Resttemplate,Multipart,我正在尝试将文件上载到,但遇到错误500。他们日志中的例外是(我认为他们使用的是apachejax-rs) 我已经像这样配置了restemplate @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); ma

我正在尝试将文件上载到,但遇到错误500。他们日志中的例外是(我认为他们使用的是
apachejax-rs

我已经像这样配置了
restemplate

@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;
}
并创建了
服务

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);
}
最后,
测试
…服务呼叫

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
restemplate
发送文件时遇到类似问题。我也尝试使用
Resource
类而不是
byte[]
但是我得到了相同的错误

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