0
我有以下Web服务,它应该通过HTML表单获取文件,将它保存在服务器上的某个地方。javax.ws.rs.NotSupportedException:找不到类型的消息正文阅读器:class com.sun.jersey.core.header.FormDataContentDisposition
@Path("/dv")
public class Uploader {
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(@FormDataParam("file") InputStream stream, @FormDataParam("file") FormDataContentDisposition fileDetails) {
FileOperations fo = new FileOperations(stream); // My own class
try {
fo.saveToFile(fileDetails.getFileName());
} catch (IOException ex) {
ex.printStackTrace();
}
return Response.status(200).entity("").build();
}
}
HTML表格就是这样的。
<form name="upload-form" method="post" action="http://localhost:18080/dv/upload" enctype="multipart/form-data">
<input type="file" name="file" id="file" />
<input type="submit" />
</form>
每当我通过这种形式上传文件,我得到一个错误
javax.ws.rs.NotSupportedException: Could not find message body reader for type: class com.sun.jersey.core.header.FormDataContentDisposition of content type: multipart/form-data;boundary=----WebKitFormBoundaryHvAymGjNVVEB1VWa
这里是堆栈跟踪
javax.ws.rs.NotSupportedException: Could not find message body reader for type: class com.sun.jersey.core.header.FormDataContentDisposition of content type: multipart/form-data;boundary=----WebKitFormBoundaryHvAymGjNVVEB1VWa
at org.jboss.resteasy.core.interception.ServerReaderInterceptorContext.throwReaderNotFound(ServerReaderInterceptorContext.java:52)
at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.getReader(AbstractReaderInterceptorContext.java:73)
at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:50)
at org.jboss.resteasy.plugins.interceptors.encoding.GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:59)
at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:53)
at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:150)
at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:88)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:111)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:280)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:234)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:221)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356)
at org.jboss.resteasy.core.SynchronousDispatcher.invokePropagateNotFound(SynchronousDispatcher.java:217)
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:224)
at org.jboss.resteasy.plugins.server.servlet.FilterDispatcher.doFilter(FilterDispatcher.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.marmotta.platform.core.servlet.MarmottaResourceFilter$LMFFilterChain.doFilter(MarmottaResourceFilter.java:189)
at org.apache.marmotta.platform.core.filters.ModuleResourceFilter.doFilter(ModuleResourceFilter.java:169)
的问题是,我不明白是什么问题在这里。我已将@Consumes(MediaType.MULTIPART_FORM_DATA)更改为@Consumes(“multipart/form-data”),但我得到相同的错误。
浏览器发送的HTTP报文,以下内容类型
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryHvAymGjNVVEB1VWa
我从服务器获取
415 Unsupported Media Type
一个415的响应。如果有帮助,我使用谷歌浏览器。
从stacktrace,你似乎使用RESTeasy,而不是泽西岛。请参阅[RESTeasy文档](http://docs.jboss.org/resteasy/docs/3.0.12.Final/userguide/html/Multipart.html)。这是您需要的[依赖项](http://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-multipart-provider) –
抛出错误的FormDataContentDisposition类来自jersey-contrib。 – thisisshantzz
这不是泽西类抛出异常。它的RESTeasy告诉你它不支持Jersey类型。查看我链接到的多部分支持的文档。您将不会使用Jersey组件。你可以完全摆脱泽西岛的依赖 –