[英]Jersey Client multi-part/form-data message body writer exception
我覺得我非常接近,但在這里錯過了一塊拼圖。 我得到一個關於消息體編寫器的例外。 任何幫助表示贊賞。
服務器端代碼
@POST
@Path("/{id}/documents")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response uploadAndAddNewDocument(
@FormDataParam("file") final InputStream fileInputStream,
@FormDataParam("file") final FormDataContentDisposition fileDetail,
@FormDataParam("file") final FormDataBodyPart fileBodyPart,
@FormDataParam("model") final SomeModel model,
@FormDataParam("model") final FormDataBodyPart modelBodyPart) throws WebApplicationException {
// Here model is received as application/json
// Code to process model and uploaded file
// This works when posted using POSTMAN
}
服務器代碼使用以下POSTMAN請求
POST /someresource/123/documents HTTP/1.1
Host: localhost:8080
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Cache-Control: no-cache
Postman-Token: c6425906-1b1f-39d0-bed6-93db9e9a6ad9
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="report.xml"
Content-Type: application/xml
<root></root>
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="doc"
Content-Type: application/json
{}
----WebKitFormBoundary7MA4YWxkTrZu0gW
澤西客戶代碼
//Client configuration code
config.getClasses().add(MultiPartWriter.class);
//Client call to server
FormDataMultiPart multiPartFormData = new FormDataMultiPart();
multiPartFormData.bodyPart(new BodyPart("doc", MediaType.APPLICATION_JSON_TYPE));
multiPartFormData.bodyPart(new FileDataBodyPart("file", uploadFile));
return service.path(uri).type(MediaType.MULTIPART_FORM_DATA).post(SomeModel.class, multiPartFormData);
**錯誤
Mar 03, 2015 11:55:40 PM com.sun.jersey.api.client.RequestWriter$RequestEntityWriterImpl <init>
SEVERE: A message body writer for Java class com.sun.jersey.multipart.FormDataMultiPart, and Java type class com.sun.jersey.multipart.FormDataMultiPart, and MIME media type application/octet-stream was not found
Mar 03, 2015 11:55:40 PM com.sun.jersey.api.client.RequestWriter$RequestEntityWriterImpl <init>
SEVERE: The registered message body writers compatible with the MIME media type are:
application/octet-stream ->
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
你需要檢查的東西很少
將mimepull.jar添加到您的lib或Maven
<dependency> <groupId>org.jvnet.mimepull</groupId> <artifactId>mimepull</artifactId> <version>1.9.5</version> </dependency>
如果您正在處理文件,請確保在標題處發送content-length content-type accept-encoding
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.