2014-02-28 3 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(); 
    } 
} 

내 메이븐 의존성이

<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의 이전 버전을 사용합니다. 그래서 나는 수입품 중 일부가 한 저지 버전에서 다른 곳에서 가져온 프로젝트로 끝을 맺었다. 이것은 일이 거의 작동하지만 이상하지는 않지만 이상한 행동을 많이합니다.