Java >> Java tutorial >  >> Tag >> public

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.


Java tag