【问题标题】:Multipart/form-data RESTEasy error on Wildfly [duplicate]Wildfly上的Multipart / form-data RESTEasy错误[重复]
【发布时间】:2021-11-21 14:16:12
【问题描述】:

我正在尝试在接受文件上传的 Wildfly 应用服务器上设置 REST API。在测试它时,我遇到了以下问题。尝试使用 Content-Type: multipart/form-data 上传时,我收到以下回复:

HTTP Status Code: 400
Content-Type: text/html;charset=UTF-8
Body: "java.io.IOException: RESTEASY007550: Unable to get boundary for multipart"

这是尝试的请求。

Headers 
{
  "content-length": "233",
  "content-type": "multipart/form-data",
  "accept-encoding": "multipart/form-data",
  "authorization": "Bearer ommitted"
  "user-agent": "PostmanRuntime/7.28.3"
}

Body
----------------------------976685076323434093219932
Content-Disposition: form-data; name="file"; filename="import.csv"
Content-Type: text/csv

destination
1234567890

----------------------------976685076323434093219932--

API端点配置如下:

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;

@Stateless
@Path("/import")
@Produces(MediaType.APPLICATION_JSON)
public class ImportAPI {

    @POST
    @Path("/{id}/do")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response doImport(
        @Context HttpServletRequest request,
        @PathParam("id") Integer campaignId,
        MultipartFormDataInput input) {
        // Code omitted
        return Response.ok().build();
    }
}

发生错误时,服务器日志上没有打印错误日志。我正在使用 Wildfly 23 和 RESTEasy 3.15.1.Final(由 Wildfly App Server 提供)。

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-multipart-provider</artifactId>
    <version>3.15.1.Final</version>
    <scope>provided</scope>
</dependency>

我不完全确定请求或 API 端点是否有问题,我希望对此有所了解。

【问题讨论】:

    标签: java wildfly multipartform-data resteasy java-ee-8


    【解决方案1】:

    Content-Type 字段错误。在您的示例中,它需要类似于:

    "Content-Type": multipart/form-data; boundary="--------------------------976685076323434093219932"
    

    减号(破折号)字符比当前示例正文中显示的少两个。

    【讨论】:

    • 哪个 Content-Type 错误?据我了解,Content-Type 有两个引用,一个设置为请求的标头,一个用于多部分中包含的每个部分。请求上的一组已经是 multipart/form-data。我需要为请求中的每个部分设置相同的 Content-Type 吗?
    • 正如我所展示的,它是“整体”内容类型。您需要告诉帖子正文是“multipart/form-data”以及边界是什么。然后每个部分都有自己的内容类型。
    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 2013-07-30
    • 2022-10-07
    • 2014-01-18
    • 1970-01-01
    • 2019-02-26
    • 2022-08-08
    相关资源
    最近更新 更多