簡體   English   中英

休息服務Jax-Rs - 發布Multipart / data

[英]Rest Service Jax-Rs - Post Multipart/data

我有一個jax-rs REST服務,使用JEE 7(部署在glassfish 4中),它有一個方法來處理資源上的HTTP POST:

    import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
    import org.glassfish.jersey.media.multipart.FormDataParam; 


    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadVideo(
            @FormDataParam("files") InputStream uploadedInputStream,
            @FormDataParam("files") FormDataContentDisposition fileDetail) { 
        try {

            //do something

        } catch (Exception e) {

            e.printStackTrace();
        }

        return toReturn.build();
    }

我在ejb中的pom.xml是:

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

我用這些注釋注冊了其余的資源:

@ApplicationPath("/rest")
public class JaxRsActivator extends Application {

@Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> resources = new HashSet<>();
        resources.add(MultiPartFeature.class);
        return resources;
    }

    @Override
    public Map<String, Object> getProperties() {
        Map<String, Object> properties = new HashMap<>();
        properties.put("jersey.config.server.provider.packages", "com.myBean.upload");
        return properties;
    }  
}

當我嘗試啟動服務器時,我收到此錯誤:

java.lang.ClassCastException:無法將org.glassfish.jersey.ext.cdi1x.transaction.internal.TransactionalExceptionInterceptorProvider強制轉換為org.glassfish.jersey.server.spi.ComponentProvider

我已經讀過這個問題: 針對multipart formdata的Jersey 2注入源以及如何定義在JEE中處理多部分數據的JAX-RS服務? 但我找不到解決方案。 有什么建議么?

- 生產日志

警告:WELD-000411:Observer方法[BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType,BeanManager)接收所有帶注釋類型的事件。 考慮使用@WithAnnotations限制事件或使用帶邊界的泛型類型。 警告:WELD-000411:Observer方法[BackedAnnotatedMethod] private org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType)接收所有帶注釋類型的事件。 考慮使用@WithAnnotations限制事件或使用帶邊界的泛型類型。 警告:WELD-000411:Observer方法[BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType,BeanManager)接收所有帶注釋類型的事件。 考慮使用@WithAnnotations限制事件或使用帶邊界的泛型類型。 警告:WELD-000411:Observer方法[BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType)接收所有帶注釋類型的事件。 考慮使用@WithAnnotations限制事件或使用帶邊界的泛型類型。 警告:WELD-000411:Observer方法[BackedAnnotatedMethod] private org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType)接收所有帶注釋類型的事件。 考慮使用@WithAnnotations限制事件或使用帶邊界的泛型類型。 警告:WELD-000411:Observer方法[BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType)接收所有帶注釋類型的事件。 考慮使用@WithAnnotations限制事件或使用帶邊界的泛型類型。

最后我得到了解決方案。 對於第一個問題:

無法將org.glassfish.jersey.ext.cdi1x.transaction.internal.TransactionalExceptionInterceptorProvider轉換為org.glassfish.jersey.server.spi.ComponentProvider

解決方案是@peeskillet給出的解決方案。

我真正的問題有點不同,因為我錯過了使用Rest Resource注冊所有軟件包。 我在這里發布了這個問題的解決方案:

        @ApplicationPath("/rest")
        public class JaxRsActivator extends Application {

        @Override
            public Set<Class<?>> getClasses() {
                final Set<Class<?>> resources = new HashSet<Class<?>>();
                resources.add(MultiPartFeature.class);
                return resources;
            }

            @Override
            public Map<String, Object> getProperties() {
                Map<String, Object> properties = new HashMap<>();
                String array[] = {"com. myBean.home","com. myBean.upload","com.bandyer.search","com.bandyer.mail"};
                properties.put("jersey.config.server.provider.packages", array);
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM