使用POST

时间:2017-10-09 15:14:15

标签: rest jax-rs tomcat7

我正在开发一个必须接收excel文件的POST方法,但是我遇到了一些问题。这是我的代码

@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不支持的媒体类型,但在我用于发送请求的代码中,我发送了请求&#39;内容类型&#39;:&#39; multipart / form-data&#39;,相应的@Consumes注释。

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

1 个答案:

答案 0 :(得分:1)

你使用了错误的FormDataMultiPart。你正在使用的是Jersey 1.x jar,但你应该使用Jersey 2.x中的那个。罐子是jersey-media-multipart。添加此jar并删除1.x jar后,FormDataMultiPart的包名称将不同。您需要从org.glassfish.jersey.multipart导入它。

另一件事,取决于您使用的Jersey(次要)版本以及您使用的jersey-media-multipart版本,mimepull版本也会有所不同。查看this link并单击您正在使用的版本。然后向下滚动到“编译依赖关系”。您会看到mimepull。这是您需要的与您正在使用的jersey-media-multipart版本兼容的版本。