javax.ws.rs.NotSupportedException : Could not find message body reader for type: class com. sun.jersey.core.header.FormDataContentDisposition

标签 java web-services jersey

我有以下 Web 服务,该服务应该通过 HTML 表单获取文件并将其保存在服务器上的某个位置。

@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") 但出现相同的错误。

浏览器发送具有以下Content-Type的HTTP数据包

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryHvAymGjNVVEB1VWa

我从服务器收到了 415 响应

415 Unsupported Media Type

如果有帮助,我正在使用 Google Chrome。

最佳答案

peeskillet是正确的。我使用了不正确的依赖项。我更新了我的 pom.xml 文件以包含 RESTEasy jar,它开始工作。

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

关于javax.ws.rs.NotSupportedException : Could not find message body reader for type: class com. sun.jersey.core.header.FormDataContentDisposition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33277878/

相关文章:

java - 如何在两台计算机之间传递大量数据

gradle - Jersey + jetty + Gradle 404错误-但可在Tomcat中使用

android - 在 Android 上使用 Jersey REST 客户端获取 NullPointErexception

java - Android Studio Gradle同步失败,CreateProcess错误= 5

java - jvisualvm:软件导致连接中止:套接字写入错误

Android 如何从 web 服务将数据插入 sql - 需要获取错误有效的 soap 操作

android - 与各种 REST 服务集成的移动应用程序架构

java - 状态 404 Jersey rest 服务与 tomcat 8

java - 我可以在 Android 中通过按键时的后台应用程序以编程方式生成触摸事件吗?

java - 将 csv 打开到输入流中