2013-03-07 7 views
8

私は、Apache CXFを使用してJacksonを使用してJSONファイルを使用して生成するWebサービスで作業していました。
しかし、サービスのメソッドの1つは、Webアプリケーションへのマルチパート/フォームデータのPOST要求を行うモバイルアプリケーションからアップロードされたイメージを保存できなければならず、この種のコンテンツタイプをどのように扱うかわからない私の状況私たちは通常、JSONを消費して生成するための "Request"と "Response"オブジェクトを作成しますが、この場合はうまくいかないでしょう。RESTful CXFを使用したマルチパート/フォームデータの消費

これはリクエスト形式です:

Content-type: multipart/form-data 
"Description": text/plain 
"Path": text/plain 
"Image": image/jpeg 

正しく要求のこの種を消費し、画像サーバサイドを保存する方法は?

次のPOSTリクエストを消費しようとすると、しかし

public returnType savePicture(
       @Multipart(value = "mode", type = "text/plain") String mode, 
       @Multipart(value = "type", type = "text/plain") String type, 
       @Multipart(value = "path", type = "text/plain") String path 
       @Multipart(value = "image", type = "image/jpeg") Attachment image 
      ) 
    { 


[EDIT]

は、私はこれを使用してマルチパート/フォームデータを消費するために管理しました

Content-type: multipart/form-data, boundary=AaB03x 

--AaB03x 
content-disposition: form-data; name="mode" 

T 
--AaB03x 
content-disposition: form-data; name="type" 

M 
--AaB03x 
content-disposition: form-data; name="path" 

c:/img/ 
--AaB03x 
content-disposition: form-data; name="image"; filename="image.jpg" 
Content-Type: image/jpeg 
Content-Transfer-Encoding: binary 

imgdata 
--AaB03x-- 

次のエラーが表示されます。

javax.ws.rs.BadRequestException: org.apache.cxf.jaxrs.utils.multipart.MultipartReadException: No multipart with content id type found, request content type : multipart/form-data;boundary=AaB03x

私だけモードを消費する場合、例えば、それが正常に動作します。それは2つ以上のパラメータのためだけに壊れます。それが間違っている理由は何ですか?

+1

1. HTTPを参照してください/ /stackoverflow.com/questions/10246579/jax-rs-with-cxf-rest-assured-handling-multiparam-file-upload 2. http://stackoverflow.com/questions/8913382/uploading-multiple-files-and- metadata-with-cxfこれらを参照してください – Sikorski

+1

3. http://cxf.apache.org/docs/jax-rs-multiparts.html – Sikorski

+0

リンクをありがとう、私はそれらから有用なものを作ることを試みるでしょう。私はテキスト/プレーンを消費することができましたが、今はイメージに問題がありますが、リンク1のようにinputStreamを試していません。 – fcm

答えて

0

私たちはこの問題を見つけたと思われ、リクエストのフォーマットに関連していました。正しい形式は、次のとおりです。

Content-type: multipart/form-data, boundary=AaB03x 

--AaB03x 
content-disposition: form-data; name="mode" 

T--AaB03x 

content-disposition: form-data; name="type" 

M--AaB03x 

content-disposition: form-data; name="path" 

c:/img/--AaB03x 

content-disposition: form-data; name="image"; filename="image.jpg" 
Content-Type: image/jpeg 
Content-Transfer-Encoding: binary 

imgdata--AaB03x-- 

この形式に変更すると、他のパラメータを使用することができました。

1

いつか同じような問題に直面しました。

次のコードは、要するに私

@POST 
@Consumes("multipart/form-data") 
public void yourMethod(<params>) throws Exception { 
} 

のためのトリックをした、それは私はあなたが不足している@Consumes注釈を考えています。

関連する問題