Helidon 3.x文件上传服务报错:java.lang.ClassNotFoundException: jakarta.ws.rs.core.EntityPart
问题解决:Helidon 3.x 中
jakarta.ws.rs.core.EntityPart 类找不到的问题 错误原因分析
出现ClassNotFoundException: jakarta.ws.rs.core.EntityPart的核心原因是:你引入的jersey-media-multipart版本与Helidon 3.x内置的JAX-RS依赖版本不兼容,且Helidon 3.x推荐使用自身封装的Multipart组件,而非直接依赖Jersey的原生Multipart库。
具体解决步骤
1. 替换依赖为Helidon官方Multipart组件
移除原有的jersey-media-multipart依赖,改用Helidon提供的Multipart支持:
<dependency> <groupId>io.helidon.media</groupId> <artifactId>helidon-media-multipart</artifactId> </dependency>
如果你的项目使用Helidon BOM管理版本,无需手动指定版本号,BOM会自动匹配与Helidon 3.x兼容的版本。
2. 删除自定义的MultiPartFeatureProvider
Helidon的MultiPartFeature会自动完成注册,不需要手动实现Feature Provider。若需手动注册,直接在应用启动时添加io.helidon.media.multipart.MultiPartFeature即可。
3. 调整API代码适配Helidon Multipart规范
修改接口代码,使用Helidon封装的Multipart API(与Jersey API略有差异):
import io.helidon.media.multipart.BodyPart; import io.helidon.media.multipart.BodyPartEntity; import io.helidon.media.multipart.MultiPart; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; @POST @Path("/sample") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response readFile(MultiPart parts) { try { for (BodyPart part : parts.bodyParts()) { if ("file[]".equals(part.contentDisposition().name())) { BodyPartEntity entity = part.entity(BodyPartEntity.class); String content = new String(entity.inputStream().readAllBytes()); return Response.ok(content).build(); } } } catch (Exception e) { e.printStackTrace(); // 建议替换为项目日志组件记录异常 } return Response.serverError().build(); }
4. 确保依赖版本一致性
在pom.xml中引入Helidon BOM,统一管理所有依赖版本,彻底避免版本冲突:
<dependencyManagement> <dependencies> <dependency> <groupId>io.helidon</groupId> <artifactId>helidon-bom</artifactId> <version>3.2.2</version> <!-- 替换为你使用的Helidon 3.x具体版本 --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
内容的提问来源于stack exchange,提问作者Nagarjuna Katta
相关产品推荐
相关产品推荐

