MULTIPART_FORM_DATA:Ingen injektionskilde fundet for en parameter af typen public javax.ws.rs.core.Response
Slip af med jersey-multipart-1.18.jar
. Det er for Jersey 1.x. Tilføj disse to
- jersey-media-multipart-2.17
- mimepull-1.9.3
For Maven ville du bruge følgende afhængighed (du behøver ikke udtrykkeligt at tilføje mimepull
afhængighed, da denne vil trække det ind).
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.17</version> <!-- Make sure the Jersey version matches
the one you are currently using -->
</dependency>
Så skal du registrere MultiPartFeature
. Hvis du bruger en ResourceConfig
for konfiguration kan du blot gøre
register(MultiPartFeature.class);
Hvis du bruger web.xml, kan du tilføje klassen som en <init-param>
til Jersey-servleten
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
Bemærk, at hvis du har flere udbydere, som du vil registrere, så kan du afgrænse hver udbyderklasse med et komma eller semikolon. Du kan ikke bruge den samme param-name
to gange. Se Suarabhs svar
OPDATERING
Også, når du slipper af med jersey-multipart-1.18.jar
du vil have kompileringsfejl for de manglende importerede klasser. For det meste er klassenavnene stadig de samme, bare pakkerne er ændret, dvs.
org.glassfish.jersey.media.multipart.FormDataParam
org.glassfish.jersey.media.multipart.FormDataContentDisposition
Til Dropwizard
Hvis du bruger Dropwizard, i stedet for at tilføje jersey-media-multipart
, dokumenterer de, så du kan tilføje dropwizard-forms
i stedet. Og i stedet for at registrere MultiPartFeature
, skal du registrere MultiPartBundle
@Override
public void initialize(Bootstrap<ExampleConfiguration> bootstrap) {
bootstrap.addBundle(new MultiPartBundle());
}
Det gør dog ikke den store forskel, da det eneste Dropwizard-pakken gør, er at registrere MultiPartFeature
med ResourceConfig.
Til side
Hvis du er her for en anden ModelValidationException
, her er nogle links til information om andre årsager til undtagelsen.
- 1
- 2
- 3
Endnu en mulig årsag til denne meget generiske fejl er, at Jersey kun søger efter fabrikker, der er forbundet med den sidste annotering, når flere er deklareret på en param. (Se fejlrapport)
Indtil dette er rettet, hvis du bruger andre annoteringer end @FormDataParam
, det skal komme sidst.
Dette virker:
@NotEmpty @FormDataParam("myParam") String myParam
Dette gør ikke:
@FormDataParam("myParam") @NotEmpty String myParam
Jeg fik også den samme undtagelse. Jeg lavede følgende ændringer i web.xml
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.moxy.json.MoxyFeature;org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
og skiftede trøje 2.7 til 2.9 .Jeg ved ikke, hvilken ændring af denne 2 der har løst problemet.