我在使用 Android 上的 Jersey 客户端 API 的 Multipart-form-data POST 请求时遇到问题。我一直在关注网络上的各种示例,它们在实现方面都非常相似。
Client client = createClientInstance();
WebResource r = client.resource(BASEURL).path("DataUpload");
ClientResponse post;
try {
FormDataMultiPart multiPart = new FormDataMultiPart();
multiPart.field("account", account);
multiPart.field("checksum", checksum);
multiPart.bodyPart(new FileDataBodyPart("file", file, MediaType.APPLICATION_OCTET_STREAM_TYPE));
post = r.type(MediaType.MULTIPART_FORM_DATA)
.accept(MediaType.TEXT_PLAIN)
.post(ClientResponse.class, multiPart);
} catch (ClientHandlerException e) {
Log.e(TAG, e.getLocalizedMessage());
} finally {
client.destroy();
}
当我在设备上执行此代码时,出现异常:
javax.ws.rs.WebApplicationException: java.lang.IllegalArgumentException: No MessageBodyWriter for body part of type 'java.io.File' and media type 'application/octet-stream'
我认为 Jersey 应该在没有任何额外配置的情况下处理 File 对象。删除 bodypart 行将允许 Jersey 提出请求,但这消除了这一点。
我的构建路径上有这些库(使用 Maven 引入):
- jersey-client-1.14
- jersey-core-1.14
- jersey-multipart-1.14
- mimepull-1-6