質問

RESTEasyを使用したファイルアップロード機能の開発、以下を参照してください。

RESTEasyマルチパートファイルのアップロード

例:

public class FileUploadForm {

    private byte[]data;

    @FormParam("file")
    public void setData(byte[]data) {
        this.data = data;
    }

   //...code omitted
}

@Path("/file")
public class UploadFileService {

    @POST
    @Path("/upload")
    @Consumes("multipart/form-data")
    public Response uploadFile(@MultipartForm FileUploadForm form) {
       //...code omitted
    }

}

上記のファイルアップロードの例は、エラーなくコンパイルできます。ただし、配備されたサービスにファイルをアップロードする際に、恐ろしいエラーメッセージが表示されます。


resteasyエラーメッセージ、title = "resteasy-upload-error-message"、width = 808、height = 488

HTTP Status 500 - Bad arguments passed to public javax.ws.rs.core.Response
com.mkyong.rest.UploadFileService.uploadFile(com.mkyong.rest.FileUploadForm)
( org.jboss.resteasy.spi.BadRequestException org.jboss.resteasy.spi.BadRequestException:
Could not find message body reader for type:
class com.mkyong.rest.FileUploadForm of content type: multipart/form-data;
boundary="---------------------------98942870323811" )

解決策

RESTEasyは ”

multipart/form-data

“のメッセージ本体リーダーを見つけることができません。 ”

resteasy-multipart-provider.jar

“に含める必要があります。

これを修正するには、2つの手順に従ってください。

1.宣言されたresteasy-multipart-provider



resteasy-multipart-provider.jar

“が宣言されていることを確認してください。 Mavenの例を参照してください:


File:pom.xml

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-multipart-provider</artifactId>
        <version>2.2.0.GA</version>
    </dependency>

2. mvn eclipse:eclipse -Dtpversion = 2.0

EclipseのWebアプリケーションプロジェクトでは、次のコマンドを使用して、すべての依存関係が正しくデプロイされていることを確認する必要があります。

mvn eclipse:eclipse -Dwtpversion=2.0

その後、Eclipse ”

Web Deployment Assembly

“を確認し、必要なすべての依存関係が含まれていることを確認してください。

  • Remember -Dwtpversion = 2.0 ** Eclipse(Webプロジェクト)では、古典的な “mvn eclipse:eclipse”はすべての依存関係を展開することができず、代わりに “mvn eclipse:eclipse -Dwtpversion = 2.0`を使うべきです。