gpt4 book ai didi

java - JAX-RS Multipart 与 com.sun.jersey

转载 作者:行者123 更新时间:2023-12-02 12:18:43 24 4
gpt4 key购买 nike

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

当我尝试接收HttpServletRequest时在 POST 内并调用 getParts()方法,我收到错误:

IllegalStateException: No multipart config for servlet

我发现我缺少 @MultipartConfig我的 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);
}
}

我已经看到使用 org.glassfish.jersey 的方法使寄存器成为 MultiPartFeature 的软件包类,但我无法在 Karaf 内部通过 HTTP 访问这些包(服务似乎注册没有错误,但所有请求都返回 404 响应)。

最佳答案

您无需尝试使用 Servlet 多部分,只需使用 Jersey's multipart support 。在链接的示例中,它使用命名部件。如果你想能够处理所有未知的部分,你可以使用 FormDataMultiPart作为方法参数。这样您就可以使用 getFields()

访问所有部分
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response post(FormDataMultiPart multiPart) {
final Map<String, List<FormDataBodyPart>> = multiPart.getFields();
}

关于java - JAX-RS Multipart 与 com.sun.jersey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45960689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com