gpt4 book ai didi

java - 在 Tomcat 9 上的 Jesery 2 中使用 multipart_form_data 时,REST 服务失败

转载 作者:行者123 更新时间:2023-11-28 22:47:17 24 4
gpt4 key购买 nike

我有几个其他服务正在运行,但如果我包含以下上传文件的方法,它们将失败:

@POST
@Path("/image2")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadImage(@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetails)
throws ServletException, IOException {

System.out.println(fileDetails.getFileName());
return Response.ok().build();
}

enter image description here

没有上述方法,其他服务正常。

enter image description here

这是我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<display-name>Talent Core</display-name>
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>

<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,Accept,Accept-Encoding,Accept-Language,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Connection,Host,authorization</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<resource-env-ref>
<resource-env-ref-name>BeanManager</resource-env-ref-name>
<resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
</resource-env-ref>
</web-app>

环境:

  • JDK 8
  • Tomcat 9

我按照这里的建议尝试了 MULTIPART_FORM_DATA: No injection source found for a parameter of type public javax.ws.rs.core.Response但同样的错误。

最佳答案

听起来这篇文章可能适用:

Why would “java.lang.IllegalStateException: The resource configuration is not modifiable in this context.” appear deploying Jersey app?

In my case, I had a Jersey POST resource for file uploads. The resource specified the parameter:

@FormDataParam("file") InputStream file

and consumed

MediaType.MULTIPART_FORM_DATA

To fix the issue, I had to add the following to the Jersey REST configuration in my web.xml file:

<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>

原始问题:HTTP 500 在 Tomcat/Jersey 下上传文件:java.lang.IllegalStateException:资源配置在此上下文中不可修改。

解决方案:将 org.glassfish.jersey.media.multipart.MultiPartFeature 添加到 web.xml。

新问题:404- 未找到

建议:

  1. 进入调试器,查看您的代码是否甚至到达 uploadImage()

  2. 如果是,则将文件名和文件路径从 fileDetails 打印到 System.out。确保 fileDetails 不为空,并且该文件确实存在。

  3. 否则,在调用“uploadImage()”的代码中设置断点,并确保它传递了有效的文件名和文件路径以进行上传。

请发回您的发现。

关于java - 在 Tomcat 9 上的 Jesery 2 中使用 multipart_form_data 时,REST 服务失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54776023/

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