2014-02-28 28 views
1

我使用Jersey 2.5.1創建上載服務。FormDataContentDisposition沒有源注入

公共類JerseyApplication擴展ResourceConfig {

public JerseyApplication() { 
     register(RequestContextFilter.class); 
     register(MultiPartFeature.class); 
     packages("com.my.app"); 
     packages(JerseyApiDeclarationProvider.class.getPackage().getName()); 
     register(JacksonFeature.class); 
    } 
} 

Resource爲上載如下:

@Path("api/admin/image") 
@Produces(APPLICATION_JSON) 
@Component 
public class ImageUploadResource { 

    @POST 
    @Path("/upload") 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    public String upload(@FormDataParam("file") InputStream fileInputStream, 
         @FormDataParam("file") FormDataContentDisposition contentDispositionHeader) { 
     return contentDispositionHeader.getFileName(); 
    } 
} 

我的Maven依賴包括

<dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-multipart</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet</artifactId> 
    </dependency> 

但啓動應用程序失敗:

[FATAL] No injection source found for a parameter of type public java.lang.String com.my.app.resource.ImageUploadResource.upload(java.io.InputStream,com.sun.jersey.core.header.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 com.my.app.resource.ImageUploadResource, handlerConstructors=[[email protected]]}, definitionMethod=public java.lang.String com.sanoma.avain.resource.ImageUploadResource.upload(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition), parameters=[Parameter [type=class java.io.InputStream, source=file, defaultValue=null], Parameter [type=class com.sun.jersey.core.header.FormDataContentDisposition, source=file, defaultValue=null]], responseType=class java.lang.String}, nameBindings=[]}'] 
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:444) 

從所有例子中我發現這應該是非常標準的方式,我只找到解決方案,他們錯過了jersey-media-multipart依賴關係。

回答

0

嗯,這是一個典型的PEBCAC。我們在我們的項目中使用了Swagger作爲依賴項。 Swagger使用的是Jersey的舊版本和舊版本的Jersey2。所以我結束了一個項目,其中一些從一個澤西島版本進口,另一個從另一個進口。這會導致很多奇怪的行爲,因爲事情幾乎不能完成。