使用POST上传excel文件时出现JAX-RS问题

问题描述:

我正在开发一个POST方法,它必须接收一个excel文件,但我遇到了一些问题。这是我的代码使用POST上传excel文件时出现JAX-RS问题

@Path("/rest") 
public class RestManager{ 
    [...] 

    @Path("/uploadFile") 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    @POST 
    public Response uploadFile(FormDataMultiPart multipart){ 
     [...] 
    } 
} 

当我调用API,在服务器端,我有以下错误:

ott 09, 2017 4:58:48 PM org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor aroundReadFrom 
GRAVE: MessageBodyReader not found for media type=multipart/form-data, type=class com.sun.jersey.multipart.FormDataMultiPart, genericType=class com.sun.jersey.multipart.FormDataMultiPart. 

在我的web.xml,我添加以下代码:

<init-param> 
    <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value> 
    </init-param> 

我在Tomcat v7.0上运行,并添加了jersey-multipart-1.18和mimepull-1.9.3来管理Multipart数据。

我的客户端响应获取415 Unsupported Media Type,但在代码中,我使用该请求发送请求“Content-Type”:'multipart/form-data',相应地使用@Consumes注释。

任何人都可以给我提示,了解问题出在哪里?

您使用的是错误的FormDataMultiPart。你使用的是Jersey 1.x jar,但你应该使用Jersey 2.x中的那个。罐子是jersey-media-multipart。一旦添加了该jar并删除了1.x jar,则FormDataMultiPart的软件包名称将会有所不同。您需要从org.glassfish.jersey.multipart导入。

另一件事,根据您使用的泽西(小)版本和您使用的jersey-media-multipart版本,mimepull版本也将有所不同。检出this link并单击您正在使用的版本。然后向下滚动到“编译相关性”。你会看到mimepull。这是您需要的版本,与您使用的jersey-media-multipart版本兼容。