2

Spring で RoboSpice を使用してサーバーにファイルをアップロードする方法を理解しようとしていますが、機能する例が見つかりません。私が見つけた1つの例から、私は構築しました:

   class UploadJsonRequest extends SpringAndroidSpiceRequest<APIResponseUpload> {

          public UploadJsonRequest() {
                super( APIResponseUpload.class );
            }

            @Override
            public APIResponseUpload loadDataFromNetwork() throws Exception {

                MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
                for(org.calflora.observer.model.Attachment a : o.attachments){

                    parts.add(a.name, new FileSystemResource(a.localPath));

                }
                //parts.add("record", base);
                return getRestTemplate().postForObject(URI, parts, APIResponseUpload.class);
            } 
     }
    return new UploadJsonRequest();

ただし、これによりエラーが発生します。

Caused by: org.springframework.web.client.HttpClientErrorException: 404 err: org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/json;charset=UTF-8

これは、multipart/form-data を使用してデータを送信する必要があることを示すために、何か追加する必要があることを示しているようです。これが正しい場合、これはどのように行われますか? これが正しくない場合、これは明らかに共通のニーズであるため、標準的なアプローチは何ですか?

4

1 に答える 1

4

私の場合、以下はこの問題を解決しました

HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(parts, requestHeaders);

RestTemplate restTemplate = getRestTemplate();
restTemplate.getMessageConverters().add(new FormHttpMessageConverter());
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

return restTemplate.postForObject(URI, requestEntity, APIResponseUpload.class);

ただし、Spring のドキュメントによると、メッセージ コンバーターを手動で設定する必要はありませんでした。

于 2013-04-16T02:42:34.317 に答える