Java 未找到com.sun.jersey.core.header.FormDataContentDisposition类的消息正文读取器

Java 未找到com.sun.jersey.core.header.FormDataContentDisposition类的消息正文读取器,java,rest,file-upload,resteasy,Java,Rest,File Upload,Resteasy,我已经编写了一个rest服务来上传文件。我使用的文件上传休息容易。此外,我还尝试了我在SO上找到的有关问题的所有解决方案。但这对我不起作用。 下面是我的端点定义 @POST @Consumes(MediaType.MULTIPART_FORM_DATA) @Path("/ckeditorUpload") public String uploadCkEditorFile(@FormDataParam("file") InputStream uploadedInputStream, @Form

我已经编写了一个rest服务来上传文件。我使用的文件上传休息容易。此外,我还尝试了我在SO上找到的有关问题的所有解决方案。但这对我不起作用。 下面是我的端点定义

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/ckeditorUpload")
public String uploadCkEditorFile(@FormDataParam("file") InputStream    uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileMetaData);
下面是我的pom.xml中的rest easy依赖项

            <!-- JAXB provider -->
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxb-provider</artifactId>
        <version>2.3.1.GA</version>
    </dependency>
    <!-- Multipart support -->
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-multipart-provider</artifactId>
        <version>2.3.1.GA</version>
    </dependency>       
</dependencies>

任何帮助都将不胜感激

很难说您提供的代码有什么问题,但下面的代码是有效的:

pom.xml

    ...
    <dependencies>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>3.0.4.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-multipart-provider</artifactId>
            <version>3.0.4.Final</version>
        </dependency>
    </dependencies>
    ...
。。。
org.jboss.resteasy
resteasy jaxrs
3.0.4.4最终版本
org.jboss.resteasy
resteasy多部分提供程序
3.0.4.4最终版本
...
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>JAXRS-RESTEasy</display-name>

    <servlet-mapping>
        <servlet-name>resteasy-servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

    <!-- Auto scan REST service -->
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>

    <!-- this should be the same URL pattern as the servlet-mapping property -->
    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/rest</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
            </listener-class>
    </listener>

    <servlet>
        <servlet-name>resteasy-servlet</servlet-name>
        <servlet-class>
            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
        </servlet-class>
    </servlet>

</web-app>

JAXRS RESTEasy
RESTEasyServlet
/休息/*
轻松扫描
真的
resteasy.servlet.mapping.prefix
/休息
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
RESTEasyServlet
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
RESTEasyFileUploadService.java

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;

import org.jboss.resteasy.plugins.providers.multipart.InputPart;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;

@Path("/files")
public class RESTEasyFileUploadService {

     private static final String SERVER_UPLOAD_LOCATION_FOLDER = "C://path/where_to_store";

    @POST
    @Path("/upload")
    @Consumes("multipart/form-data")
    public Response uploadFile(MultipartFormDataInput input) {

        String fileName = "";

        Map<String, List<InputPart>> formParts = input.getFormDataMap();

        List<InputPart> inPart = formParts.get("file");

        for (InputPart inputPart : inPart) {

             try {

                // Retrieve headers, read the Content-Disposition header to obtain the original name of the file
                MultivaluedMap<String, String> headers = inputPart.getHeaders();

                fileName = parseFileName(headers);
                // Handle the body of that part with an InputStream
                InputStream istream = inputPart.getBody(InputStream.class,null);

                fileName = SERVER_UPLOAD_LOCATION_FOLDER + fileName;

                saveFile(istream,fileName);

              } catch (IOException e) {
                e.printStackTrace();
              }

            }

                String output = "File saved to server location : " + fileName;

        return Response.status(200).entity(output).build();
    }

    // Parse Content-Disposition header to get the original file name
    private String parseFileName(MultivaluedMap<String, String> headers) {

        String[] contentDispositionHeader = headers.getFirst("Content-Disposition").split(";");

        for (String name : contentDispositionHeader) {

            if ((name.trim().startsWith("filename"))) {

                String[] tmp = name.split("=");

                String fileName = tmp[1].trim().replaceAll("\"","");

                return fileName;

            }

        }

        return "randomName";

    }

    // save uploaded file to a defined location on the server
    private void saveFile(InputStream uploadedInputStream,

        String serverLocation) {

        try {
            OutputStream outpuStream = new FileOutputStream(new File(serverLocation));
            int read = 0;
            byte[] bytes = new byte[1024];

            outpuStream = new FileOutputStream(new File(serverLocation));
            while ((read = uploadedInputStream.read(bytes)) != -1) {
                outpuStream.write(bytes, 0, read);
            }

            outpuStream.flush();
            outpuStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.OutputStream;
导入java.util.List;
导入java.util.Map;
导入javax.ws.rs.Consumes;
导入javax.ws.rs.POST;
导入javax.ws.rs.Path;
导入javax.ws.rs.core.MultivaluedMap;
导入javax.ws.rs.core.Response;
导入org.jboss.resteasy.plugins.providers.multipart.InputPart;
导入org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
@路径(“/files”)
公共类RESTEasyFileUploadService{
私有静态最终字符串服务器\u上载\u位置\u文件夹=“C://path/where\u to\u存储”;
@职位
@路径(“/upload”)
@使用(“多部分/表单数据”)
公共响应上载文件(MultipartFormDataInput){
字符串fileName=“”;
Map formParts=input.getFormDataMap();
List inPart=formParts.get(“文件”);
用于(输入部分输入部分:输入部分){
试一试{
//检索头,读取内容处置头以获取文件的原始名称
多值Map headers=inputPart.getHeaders();
文件名=解析文件名(标题);
//使用InputStream处理该部件的主体
InputStream istream=inputPart.getBody(InputStream.class,null);
fileName=服务器\上传\位置\文件夹+文件名;
保存文件(istream,文件名);
}捕获(IOE异常){
e、 printStackTrace();
}
}
String output=“保存到服务器位置的文件:”+文件名;
返回Response.status(200).entity(output.build();
}
//解析内容处置标头以获取原始文件名
私有字符串解析文件名(多值映射头){
字符串[]contentDispositionHeader=headers.getFirst(“内容处置”).split(;”);
for(字符串名称:contentDispositionHeader){
如果((name.trim().startsWith(“filename”)){
字符串[]tmp=name.split(“”);
字符串文件名=tmp[1].trim().replaceAll(“\”,”);
返回文件名;
}
}
返回“随机名称”;
}
//将上载的文件保存到服务器上定义的位置
私有void保存文件(InputStream上载InputStream,
字符串(位置){
试一试{
OutputStream OutputStream=新文件OutputStream(新文件(服务器位置));
int read=0;
字节[]字节=新字节[1024];
outpuStream=新文件outputstream(新文件(服务器位置));
while((read=uploadeInputStream.read(字节))!=-1){
outpuStream.write(字节,0,读取);
}
outpuStream.flush();
outpuStream.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}

很难说您提供的代码有什么问题,但下面的代码是有效的:

pom.xml

    ...
    <dependencies>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>3.0.4.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-multipart-provider</artifactId>
            <version>3.0.4.Final</version>
        </dependency>
    </dependencies>
    ...
。。。
org.jboss.resteasy
resteasy jaxrs
3.0.4.4最终版本
org.jboss.resteasy
resteasy多部分提供程序
3.0.4.4最终版本
...
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>JAXRS-RESTEasy</display-name>

    <servlet-mapping>
        <servlet-name>resteasy-servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

    <!-- Auto scan REST service -->
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>

    <!-- this should be the same URL pattern as the servlet-mapping property -->
    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/rest</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
            </listener-class>
    </listener>

    <servlet>
        <servlet-name>resteasy-servlet</servlet-name>
        <servlet-class>
            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
        </servlet-class>
    </servlet>

</web-app>

JAXRS RESTEasy
RESTEasyServlet
/休息/*
轻松扫描
真的
resteasy.servlet.mapping.prefix
/休息
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
RESTEasyServlet
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
RESTEasyFileUploadService.java

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;

import org.jboss.resteasy.plugins.providers.multipart.InputPart;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;

@Path("/files")
public class RESTEasyFileUploadService {

     private static final String SERVER_UPLOAD_LOCATION_FOLDER = "C://path/where_to_store";

    @POST
    @Path("/upload")
    @Consumes("multipart/form-data")
    public Response uploadFile(MultipartFormDataInput input) {

        String fileName = "";

        Map<String, List<InputPart>> formParts = input.getFormDataMap();

        List<InputPart> inPart = formParts.get("file");

        for (InputPart inputPart : inPart) {

             try {

                // Retrieve headers, read the Content-Disposition header to obtain the original name of the file
                MultivaluedMap<String, String> headers = inputPart.getHeaders();

                fileName = parseFileName(headers);
                // Handle the body of that part with an InputStream
                InputStream istream = inputPart.getBody(InputStream.class,null);

                fileName = SERVER_UPLOAD_LOCATION_FOLDER + fileName;

                saveFile(istream,fileName);

              } catch (IOException e) {
                e.printStackTrace();
              }

            }

                String output = "File saved to server location : " + fileName;

        return Response.status(200).entity(output).build();
    }

    // Parse Content-Disposition header to get the original file name
    private String parseFileName(MultivaluedMap<String, String> headers) {

        String[] contentDispositionHeader = headers.getFirst("Content-Disposition").split(";");

        for (String name : contentDispositionHeader) {

            if ((name.trim().startsWith("filename"))) {

                String[] tmp = name.split("=");

                String fileName = tmp[1].trim().replaceAll("\"","");

                return fileName;

            }

        }

        return "randomName";

    }

    // save uploaded file to a defined location on the server
    private void saveFile(InputStream uploadedInputStream,

        String serverLocation) {

        try {
            OutputStream outpuStream = new FileOutputStream(new File(serverLocation));
            int read = 0;
            byte[] bytes = new byte[1024];

            outpuStream = new FileOutputStream(new File(serverLocation));
            while ((read = uploadedInputStream.read(bytes)) != -1) {
                outpuStream.write(bytes, 0, read);
            }

            outpuStream.flush();
            outpuStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.OutputStream;
导入java.util.List;
导入java.util.Map;
导入javax.ws.rs.Consumes;
导入javax.ws.rs.POST;
导入javax.ws.rs.Path;
导入javax.ws.rs.core.MultivaluedMap;
导入javax.ws.rs.core.Response;
导入org.jboss.resteasy.plugins.providers.multipart.InputPart;
导入org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
@路径(“/files”)
公共类RESTEasyFileUploadService{
私有静态最终字符串服务器\u上载\u位置\u文件夹=“C://path/where\u to\u存储”;
@职位
@路径(“/upload”)
@使用(“多部分/表单数据”)
公共响应上载文件(MultipartFormDataInput){
字符串fileName=“”;
Map formParts=input.getFormDataMap();
List inPart=formParts.get(“文件”