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

使用Jersey 2发送multipart/form-data文件请求报错400,Postman与cUrl可正常执行

问题原因

你的代码存在两处核心错误,导致服务端无法正常解析multipart/form-data请求:

  1. FormDataMultiPart构造逻辑错误,手动拆分FileDataBodyPart导致文件字段和配置没有正确绑定,服务端识别不到file参数,反而将文件名解析为了独立的非法参数
  2. 最后请求时的媒体类型配置错误,若mediatype(MediaType.APPLICATION_JSON)是设置请求Content-Type,会直接覆盖你Entity中指定的multipart类型,导致请求格式完全错误
    同时需要确认Jersey客户端已经注册了Multipart相关组件,否则也会出现序列化异常。

修复方案

第一步:确认Jersey客户端注册MultiPartFeature

构造客户端时必须注册Multipart支持组件,示例如下:

ClientConfig clientConfig = new ClientConfig();
clientConfig.register(MultiPartFeature.class);
Client client = ClientBuilder.newClient(clientConfig);

第二步:修正业务代码

FlexRESTClient restClient = getClient();
restClient.path("/rest/v13/migrationPackages/actions/import");

final File fileToUpload = new File("C:/temp/fdplugins/work/1/1/artifacts/Project1/Project1/TestPackage1_5.zip");
FormDataMultiPart form = new FormDataMultiPart();
// 直接添加FileDataBodyPart即可,不需要手动拆分配置
form.bodyPart(new FileDataBodyPart("file", fileToUpload, MediaType.APPLICATION_OCTET_STREAM_TYPE));

Entity<FormDataMultiPart> entity = Entity.entity(form, MediaType.MULTIPART_FORM_DATA_TYPE);
// 明确设置Accept头为JSON,不要覆盖请求的Content-Type
FlexRESTClientResponse clientResponse = restClient.setValidateResponse(true)
        .accept(MediaType.APPLICATION_JSON)
        .post(entity);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:45:03