Open Liberty集成Jersey实现文件上传时遇415不支持媒体类型错误
解决Open Liberty中Jersey Multipart文件上传的415错误及MessageBodyReader缺失问题
问题根源
错误提示No message body reader has been found for class org.glassfish.jersey.media.multipart.FormDataContentDisposition说明Jersey的MultiPartFeature未被正确加载,导致无法处理multipart/form-data类型请求。结合你的配置,核心问题出在Jersey的注册逻辑或环境配置冲突上。
解决方案
1. 显式配置Jersey Servlet(替代@ApplicationPath自动扫描)
Open Liberty在未启用自带Jakarta REST特性时,可能无法自动识别@ApplicationPath标注的ResourceConfig类。需在web.xml中显式配置Jersey Servlet,确保MultiPartFeature生效:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>JerseyUploadService</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <!-- 指定你的RestApplication全类名 --> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>com.packages.to.scan.RestApplication</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JerseyUploadService</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
2. 补充mimepull依赖(避免类缺失)
虽然jersey-media-multipart会自动依赖mimepull,但部分场景下可能出现依赖传递失效。显式添加该依赖确保文件解析类存在:
<dependency> <groupId>org.jvnet.mimepull</groupId> <artifactId>mimepull</artifactId> <version>1.9.11</version> <!-- 与Jersey 2.28兼容的版本 --> </dependency>
3. 检查Open Liberty server.xml配置
确保未启用自带JAX-RS特性,避免与Jersey冲突:
<featureManager> <feature>servlet-4.0</feature> <!-- 移除所有jaxrs-*或jakarta-restful-web-services相关特性 --> </featureManager>
4. 验证Postman请求配置
- 请求方法为POST,URL与API路径一致
- 选择
form-data格式,参数名设置为file(与API中@FormDataParam("file")匹配) - 不要手动设置
Content-Type,让Postman自动生成带boundary的multipart/form-data请求头
验证修复
重新部署应用后,用Postman上传文件,即可正常接收InputStream和FormDataContentDisposition参数,不再返回415错误。
内容的提问来源于stack exchange,提问作者Pola
相关产品推荐
相关产品推荐

