首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rest Service Jax-Rs - Post多部分/数据

Rest Service Jax-Rs - Post多部分/数据
EN

Stack Overflow用户
提问于 2016-03-15 08:50:09
回答 1查看 1.6K关注 0票数 3

我有一个jax-rs REST服务,使用JEE 7(部署在glassfish 4中),它有一种在资源上处理HTTP POST的方法:

代码语言:javascript
运行
复制
    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是:

代码语言:javascript
运行
复制
<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>

我用以下注释注册了rest资源:

代码语言:javascript
运行
复制
@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;
    }  
}

当我试图启动服务器时,我会得到以下错误:

org.glassfish.jersey.ext.cdi1x.transaction.internal.TransactionalExceptionInterceptorProvider :无法将org.glassfish.jersey.server.spi.ComponentProvider转换为java.lang.ClassCastException

我已经读过这样的问题:Jersey 2 injection source for multipart formdataHow can I define a JAX-RS service that processes multi-part data in JEE?,但我找不到解决办法。有什么建议吗?

-Log生产

警告:焊缝-000411:观察者方法BackedAnnotatedMethod BackedAnnotatedMethod ProcessAnnotatedType,BeanManager)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。警告:焊缝-000411:观察者方法BackedAnnotatedMethod私有BackedAnnotatedMethod ProcessAnnotatedType)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。警告:焊缝-000411:观察者方法BackedAnnotatedMethod BackedAnnotatedMethod ProcessAnnotatedType,BeanManager)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。警告:焊缝-000411:观察者方法BackedAnnotatedMethod public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。警告:焊缝-000411:观察者方法BackedAnnotatedMethod私有BackedAnnotatedMethod ProcessAnnotatedType)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。警告:焊缝-000411:观察者方法BackedAnnotatedMethod public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-15 10:41:20

我终于找到解决办法了。关于第一个问题:

不能将org.glassfish.jersey.ext.cdi1x.transaction.internal.TransactionalExceptionInterceptorProvider转换为org.glassfish.jersey.server.spi.ComponentProvider

这个解决方案是由@peeskillet提出的。

我真正的问题是有点不同,因为我错过了用Rest资源注册所有包。无论如何,我在这里发布了这个问题的解决方案:

代码语言:javascript
运行
复制
        @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);
            }
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36006394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档