How can I enable MultiPartFeature?
Not sure why you don't just use a ResourceConfig
instead of an Application
class. The only reason I can think of is portability, but the use of the Jersey specific multipart feature already breaks that portability.
But anyway, I'll try to answer this in the "most portable" way. What you can do is set a property, as you would in a web.xml. To set arbitrary properties, you can override
@Override
public Map<String, Object> getProperties() {}
in the Application
subclass, and set the properties there.
@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;
}
This will maintain the classpath scanning for your resources and providers. The scanning is only disabled if you override getClasses()
or getSingletons()
(and return non-empty sets), but getProperties()
is fine.
Another Option:
Create a Feature
to wrap that feature, and let the feature be discovered, as seen here
Personally, I would...
Just use a ResourceConfig
, as you're already breaking portability (what's a little more breakage :-)
@ApplicationPath("/")
public class AppConfig extends ResourceConfig {
public AppConfig() {
packages("packages.to.scan");
register(MultiPartFeature.class);
}
}
Comments
-
Jin Kwon almost 2 years
My JAX-RS application has an extended Application class.
@ApplicationPath("/") public class MyApplication extends Application { // empty; really empty }
How can I enable
org.glassfish.jersey.media.multipart.MultiPartFeature
without modifying the class? Or without the necessity of registering all resource classes/packages? -
Jin Kwon about 9 yearsBravo!!! I actually used
packages(...).register(...)
. Then, suddenly,jackson-provider
fails. And overridinggetProperties()
solved my problem. Bravo!!! -
Paul Samsotha about 9 yearsMy guess is you're using this Jackson provider, which won't automatically register itself. And the classpath scanning picks up its
@Provider
annotations. Since theResourceConfig
doesn't do classpath scanning (instead package scanning), you could add the package to thepackages()
, likepackages("your.packages,com.fasterxml.jackson.jaxrs.json")
. This loads the Jackson ExceptionMapper as well as the readers and writers. -
Paul Samsotha about 9 yearsAlternatively, you could use this dependency, which actually "wraps" the previous dependency in an "auto-dicoverable" feature (v 2.9+), so you don't need to explicitly register to package scan for it. Version 2.8- jusrt
register(JacksonFeature.class);
-
Paul Samsotha about 3 yearsThe dependency from my previous comment is jersey-media-json-jackson. Here is the new link.