You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus结合Reasteasy-Reactive与JAX-RS时无法创建InputStream转换器

问题:Resteasy Reactive 中 Multipart 上传端点报错无法创建 InputStream 转换器

我编写了一个处理文件上传的 REST 端点,代码如下:

@POST
@Path("/images")
@Consumes("multipart/form-data")
@Produces("application/json")
fun upload(@FormParam(value = "file") fileInputStream: InputStream, @FormParam(value = "comment") comment: String): Response {
    anotherClass.save(fileInputStream, comment)
    return Response.ok().build()
}

测试该端点时返回如下错误:

java.lang.RuntimeException: Could not create converter for java.io.InputStream for method javax.ws.rs.core.Response upload(java.io.InputStream fileInputStream, java.lang.String altText) on class SampleClass of type FORM
at org.jboss.resteasy.reactive.server.processor.ServerEndpointIndexer.handleOtherParam(ServerEndpointIndexer.java:327)
at org.jboss.resteasy.reactive.server.processor.ServerEndpointIndexer.handleOtherParam(ServerEndpointIndexer.java:92)
at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.extractParameterInfo(EndpointIndexer.java:1341)
at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.createResourceMethod(EndpointIndexer.java:536)
... 14 more

尝试添加 resteasy-multipart 依赖无法解决问题,因为它与 resteasy-reactive 不兼容,求解决建议。


解决建议
  • 使用 @MultipartForm 封装表单数据
    Resteasy Reactive 不支持直接通过 @FormParam 绑定 InputStream 类型的文件参数,需要用专门的 @MultipartForm 注解配合 DTO 类来处理:

    首先定义表单 DTO:

    class ImageUploadForm {
        @FormParam("file")
        lateinit var file: InputStream
    
        @FormParam("comment")
        lateinit var comment: String
    }
    

    然后修改端点方法:

    @POST
    @Path("/images")
    @Consumes("multipart/form-data")
    @Produces("application/json")
    fun upload(@MultipartForm form: ImageUploadForm): Response {
        anotherClass.save(form.file, form.comment)
        return Response.ok().build()
    }
    
  • 直接使用 @Part 注解绑定单个参数
    如果不想创建 DTO,也可以直接用 @Part 注解标记每个表单参数,文件参数还可以配合 @PartType 指定MIME类型:

    @POST
    @Path("/images")
    @Consumes("multipart/form-data")
    @Produces("application/json")
    fun upload(
        @Part("file") @PartType("application/octet-stream") fileInputStream: InputStream,
        @Part("comment") comment: String
    ): Response {
        anotherClass.save(fileInputStream, comment)
        return Response.ok().build()
    }
    
  • 确认引入正确的依赖
    确保项目中使用的是 Resteasy Reactive 对应的 Multipart 依赖,比如在 Quarkus 项目中,应添加:

    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-resteasy-reactive-multipart</artifactId>
    </dependency>
    

    不要引入传统的 resteasy-multipart,二者存在兼容性冲突。


内容的提问来源于stack exchange,提问作者PumpingSalad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:59:55