如何启用MultiPartFeature?

时间:2015-04-09 09:09:17

标签: jersey jax-rs multipartform-data jersey-2.0 multipart

我的JAX-RS应用程序有一个扩展的Application类。

@ApplicationPath("/")
public class MyApplication extends Application {
    // empty; really empty
}

如何在不修改课程的情况下启用org.glassfish.jersey.media.multipart.MultiPartFeature?或者没有必要注册所有资源类/包?

2 个答案:

答案 0 :(得分:12)

不确定为什么你不只是使用ResourceConfig而不是Application类。我能想到的唯一原因是可移植性,但使用Jersey特定的多部分功能已经打破了这种可移植性。

但无论如何,我会尝试以“最便携”的方式回答这个问题。您可以做的是设置属性,就像在web.xml中一样。要设置任意属性,可以覆盖

@Override
public Map<String, Object> getProperties() {}
Application子类中

,并在那里设置属性。

@Override
public Map<String, Object> getProperties() {
    Map<String, Object> props = new HashMap<>();
    props.put("jersey.config.server.provider.classnames", 
            "org.glassfish.jersey.media.multipart.MultiPartFeature");
    return props;
}

这将维护资源和提供程序的类路径扫描。只有在您覆盖getClasses()getSingletons()(并返回非空集)时才会禁用扫描,但getProperties()没问题。

另一种选择:

创建Feature以包装 功能,然后发现该功能,seen here

就个人而言,我会......

只需使用ResourceConfig,因为您已经破坏了可移植性(更多的是破损: - )

@ApplicationPath("/")
public class AppConfig extends ResourceConfig {
    public AppConfig() {
        packages("packages.to.scan");
        register(MultiPartFeature.class);
    }
}

答案 1 :(得分:-1)

对我来说,工作如下:

        final ResourceConfig resourceConfig = new ResourceConfig(ApplicationConfig.class);
        resourceConfig.packages("com.econorma.rest");
        resourceConfig.register(MultiPartFeature.class);

        ServletHolder jerseyServlet  = new ServletHolder(new ServletContainer(resourceConfig));

这是ApplicationConfig类

@ApplicationPath("/")
public class ApplicationConfig extends Application {

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

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