如何启用MultiPartFeature?

Jin*_*won 5 multipartform-data jax-rs multipart jersey jersey-2.0

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

@ApplicationPath("/")
public class MyApplication extends Application {
    // empty; really empty
}
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*tha 12

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

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

@Override
public Map<String, Object> getProperties() {}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

这将维护您的资源和提供程序的类路径扫描.如果您覆盖getClasses()getSingletons()(并返回非空集),则仅禁用扫描,但是没问题getProperties().

另外一个选项:

创建一个Feature包装功能,然后发现该功能,如此处所示

就我个人而言......

只是使用一个ResourceConfig,因为你已经打破了可移植性(什么是更多的破损:-)

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