不知道为什么不使用 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);
}
}