Java 带有com.sun.jersey的JAX-RS多部分

Java 带有com.sun.jersey的JAX-RS多部分,java,jersey,jax-rs,multipart,karaf,Java,Jersey,Jax Rs,Multipart,Karaf,我在Karaf中托管了一个REST服务,它可以很好地处理除多部分请求之外的所有请求。我正在使用这些包,因为我只成功地在Karaf内部托管了这些包,以便通过HTTP访问 当我尝试在POST内部接收并调用方法时,我得到错误: @MultipartConfig public class MultipartServlet extends HttpServlet { @Override public void service(ServletRequest request, Servlet

我在Karaf中托管了一个REST服务,它可以很好地处理除多部分请求之外的所有请求。我正在使用这些包,因为我只成功地在Karaf内部托管了这些包,以便通过HTTP访问

当我尝试在POST内部接收并调用方法时,我得到错误:

@MultipartConfig
public class MultipartServlet extends HttpServlet {

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {

        try {
            final HttpServletRequest httpRequest = (HttpServletRequest)request;
            final Collection<Part> parts = httpRequest.getParts();

            System.out.println("There are " + parts.size() + " parts");
        }
        catch (Exception exception) {
            System.out.println("MEGA FAIL");
            System.out.println(exception.getMessage());
        }

        super.service(request, response);
    }
}
IllegalStateException:没有servlet的多部分配置

我发现我缺少servlet上的注释,所以我将其添加到我正在使用的servlet实现中。我扩展了com.sun.jersey.spi.container.servlet.ServletContainer并将注释添加到该类中。但这是行不通的

我还尝试使用我自己的HttpServlet类扩展,该扩展复制了错误:

@MultipartConfig
public class MultipartServlet extends HttpServlet {

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {

        try {
            final HttpServletRequest httpRequest = (HttpServletRequest)request;
            final Collection<Part> parts = httpRequest.getParts();

            System.out.println("There are " + parts.size() + " parts");
        }
        catch (Exception exception) {
            System.out.println("MEGA FAIL");
            System.out.println(exception.getMessage());
        }

        super.service(request, response);
    }
}

我已经看到了使用包的方法,该方法可以使用ResourceConfig注册类,但我无法通过Karaf内部的HTTP访问这些包。服务似乎注册没有错误,但所有请求都返回404个响应。

您只需使用Servlet多部分,而不用尝试使用Servlet多部分。在链接中的示例中,它使用命名零件。如果希望能够处理所有未知零件,可以将其用作方法参数。通过这种方式,您可以使用getFields访问所有部件


当您想使用Jersey时,为什么要尝试在servlet中使用multipart呢。请参阅Jersey 1.x多部分支持,该文章使用多部分请求中的特定命名部分。我需要能够处理方法本身主体中未知数量的部分,这就是我尝试使用HttpServletRequest的原因。有没有办法改用Jersey来实现这一点?@peeskillet可能还值得强调的是,我在Karaf内部运行这个servlet,所以我已经在安装了Karaf的HttpService上注册了这个servlet,因为这是我在Karaf中托管RESTful服务的唯一方法,该服务可以通过HTTP访问,即在localhost:8181上。如果有更好的方法来实现这一点,那么任何方向都是值得赞赏的。我需要能够处理方法本身主体中未知数量的部分——用作方法参数。您不需要使用任何批注。@peeskillet我猜我遗漏了什么,但是当尝试将其用作没有批注的服务的方法参数时,我得到了400个错误的请求响应。知道我遗漏了什么吗?