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

WildFly 34(Jakarta EE 10)JAX-RS多部分表单文件上传报错咨询

解决方案:WildFly 34中JAX-RS文件上传避免MultipartConfig配置问题

问题原因

OpenLiberty会自动为处理multipart/form-data的JAX-RS端点添加Servlet的MultipartConfig配置,而WildFly 34的Undertow容器默认要求显式配置该参数,因此直接使用Servlet API(如request.getParts())或非标准JAX-RS参数注解处理文件上传时会抛出UT010057: multipart config was not present on Servlet异常。

方案一:使用JAX-RS标准Multipart API(可移植,最小代码修改)

改用JAX-RS规范定义的@FormDataParam注解替代Servlet API或@FormParam,这是跨容器的可移植方案,无需依赖Servlet的MultipartConfig配置。

修改后的代码示例

第一个接口修改为:

@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void uploadFiles(@FormDataParam("files") List<FormDataBodyPart> fileParts, @Suspended final AsyncResponse asyncResponse) {
    // 处理文件部件,示例:获取文件输入流
    for (FormDataBodyPart part : fileParts) {
        InputStream fileStream = part.getEntityAs(InputStream.class);
        // 后续处理逻辑
    }
}

第二个接口修改为:

@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void uploadFile(@FormDataParam("fileName") final String fileName, @FormDataParam("file") final InputStream inputStream, @Suspended final AsyncResponse asyncResponse)  {
    // 原有处理逻辑保持不变
}

方案二:无需修改Java源码的WildFly配置方案

如果希望完全保留原有代码,可通过配置文件为JAX-RS自动生成的Servlet添加MultipartConfig:

方式1:通过web.xml配置

在WEB-INF/web.xml中显式配置JAX-RS对应的Servlet并添加MultipartConfig:

<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>
        <!-- 对应JAX-RS自动注册的Servlet名称 -->
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <multipart-config>
            <!-- 可根据需求调整参数,以下为默认值 -->
            <location></location>
            <max-file-size>-1</max-file-size>
            <max-request-size>-1</max-request-size>
            <file-size-threshold>0</file-size-threshold>
        </multipart-config>
    </servlet>
</web-app>

方式2:通过jboss-web.xml配置

若应用未使用web.xml,可在WEB-INF/jboss-web.xml中添加配置:

<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_10_0.xsd"
           version="10.0">
    <servlet>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <multipart-config>
            <location></location>
            <max-file-size>-1</max-file-size>
            <max-request-size>-1</max-request-size>
            <file-size-threshold>0</file-size-threshold>
        </multipart-config>
    </servlet>
</jboss-web>

配置完成后,WildFly会自动为JAX-RS Servlet应用MultipartConfig,原有代码即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:50:11