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
依賴關係。