我正在开发RESTful服务(在 TomEE 上)并需要使用multipart/form-data
来上传文件以及传递额外的JSON。使用Jersey 2,我已经包含了所有必需的依赖项(包括jersey-media-multipart
甚至mimepull
)
我写了一个简单的资源方法:
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(@FormDataParam("file") InputStream uploadInputStream,
@FormDataParam("file") FormDataContentDisposition contentDisposition,
@FormDataParam("details") UploadDetails uploadDetails) {
// processing
}
从邮递员拨打电话会导致415 Unsupported Media Type
,而堆栈跟踪就是这样:
严重:没有为课程找到邮件正文阅读器 org.glassfish.jersey.media.multipart.FormDataContentDisposition, 内容类型: 多部分/格式数据;边界= -------------------------- 152775525417017934208524
2018年4月18日下午3:33:55 org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse
警告:javax.ws.rs.WebApplicationException:HTTP 415不支持 媒体类型
在org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1346)
找不到类FormDataContentDisposition
的邮件正文阅读器。使用FormDataMultiPart
等其他变量时,会出现相同的异常。
注意事项:
我在主类中注册了MultipartFeature(扩展了Application):
@Override
public Map<String, Object> getProperties() {
Map<String, Object> props = new HashMap<>();
props.put("jersey.config.server.provider.classnames", "org.glassfish.jersey.media.multipart.MultiPartFeature");
return props;
}
我也看过SO中关于这个问题的所有帖子,似乎没有任何帮助。
我无法找到它是如何发生的。也许我在这里看到了一些东西?
修改
标记的副本在我的案例中没有帮助。