http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/ 我按照本指南運行時出現問題。我有一些疑問。org.glassfish.jersey上傳帶有FormDataContentDisposition的文件
是否所有的依賴項都必須對應?我的項目有一些org.glassfish.jersey的依賴關係,本指南建議使用org.sun.jersey。我是否也必須使用同樣的版本更改它?
<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-multipart</artifactId> <version>2.16</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.16</version>
我有這樣的錯誤
org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization. [[FATAL] No injection source found for a parameter of type public ***.***.****.common.dto.response.AbstractResponse ***.***.****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService.upload(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class ***.***.****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService, handlerConstructors=[[email protected]]}, definitionMethod=public ***.***.***.common.dto.response.AbstractResponse ***.***.*****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService.upload(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition), parameters=[Parameter [type=class java.io.InputStream, source=file1, defaultValue=null], Parameter [type=class org.glassfish.jersey.media.multipart.FormDataContentDisposition, source=file1, defaultValue=null]], responseType=class ***.***.***.common.dto.response.AbstractResponse}, nameBindings=[]}']
這是我的web服務
@POST @Path("/upload") @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.APPLICATION_JSON) public AbstractResponse upload(@FormDataParam("file1") InputStream file1, @FormDataParam("file1") FormDataContentDisposition filename1 ) {
這是我的電話:
$.ajax({ url: 'http://localhost:8080/******/webapi/m2m/upload', data: fd, processData: false, contentType: 'multipart/form-data', type: 'POST', success: function(data){ alert(JSON.stringify(data)); return; } });
如果Web服務只有1個參數(FormData InputStream),則該服務是可到達的。如何解決它?
- 我還想爲Web服務添加另一個字符串參數。我該怎麼辦?
謝謝peeskillet的答案。有點額外。
SEVERE: The web application [/linterm2m] created a ThreadLocal with key of type [org.jvnet.hk2.internal.PerLocatorUtilities$1] (value [[email protected]]) and a value of type [java.util.WeakHashMap] (value [{}]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
謝謝你的web.xml部分。我在其他地方找不到它。目前我正在查看更多內容。 – dtxd 2015-04-02 06:59:37
它現在工作得很好。再次感謝您的努力。萬一你知道,我可以問這個錯誤嗎?我將把它放在帖子中 嚴重:Web應用程序[/ linterm2m]創建了一個ThreadLocal類型的鍵[org.jvnet.hk2.internal.PerLocatorUtilities $ 1](值爲[org.jvnet.hk2.internal.PerLocatorUtilities $ 1 @ df94b1])和一個類型爲[java.util.WeakHashMap](值爲[{}])的值,但在Web應用程序停止時未能刪除它。這很可能造成內存泄漏。 – dtxd 2015-04-02 07:25:04
我不知道,但我今天早上讀到的一件事是Glassfish中Jersey版本的問題。很可能您使用的Jersey版本比Glassfish中的版本更新。我不確定你使用的是什麼版本,但是找出你使用的是什麼版本的Jersey Glassfish([這可能有幫助])(http://blog.dejavu.sk/2014/01/21/updating-jersey -2-in-glassfish-4 /)),並將您在項目中使用的版本更改爲它。您也可以嘗試將「」提供的 '添加到兩個依賴項。不知道這是否是問題,但你可以測試 –
2015-04-02 07:31:11