wake-up-neo.com

REST Webservice, der 415 zurückgibt - Nicht unterstützter Medientyp

Ich habe einen REST Webservice mit Jax-Rs und Jersey erstellt, der JSON für eine POST -Anforderung verwenden soll. Meine Webservice-Klasse sieht folgendermaßen aus:

@Path("/webhookservice")
public class Webhook {

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response readData (Song song) {

        // Prints out the song info
        System.out.println("SONG INFO \n=======================");
        System.out.println("songname: " + song.getSongname());
        System.out.println("artist: " + song.getArtist());

        // Repsonse with a HTTP 200 OK
        Response response = Response.status(200).build();
        return response;

    }

}

Meine Liedklasse:

public class Song {

    private String songname;
    private String artist;

    public String getSongname () { return this.songname; }
    public String getArtist () { return this.artist; }

    public void setSongname (String songname) { this.songname = songname; }
    public void setArtist (String artist) { this.artist = artist; }

}

Meine web.xml (falls erforderlich)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://Java.Sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

    <servlet>
        <servlet-name>SnapScan-Webhook</servlet-name>
        <servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.Sun.jersey.config.property.packages</param-name>
            <param-value>za.co.lancet.service</param-value>
        </init-param>
        <init-param>
            <param-name>com.Sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>SnapScan-Webhook</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

Ich benutze RESTClient einen kleinen Rest-Client ... Hier ist ein Screenshot von dem, was ich sende:

enter image description here

Wenn ich das verschicke, erhalte ich die Fehlermeldung 415 Unsupported Media Type. Hat jemand eine Idee warum?

13
Tiwaz89

Sie müssen den Request-Header Content-Type: application/json senden. Anscheinend fügt REST-Client diesen Header nicht automatisch für Sie hinzu.

35
lefloh

Wie andere darauf hingewiesen haben, fehlt Ihnen der korrekte Header. Fügen Sie Content-Type: application/json zu den "Headern" hinzu: enter image description here

7
grepit

Ich hatte die gleiche 415 http Fehlerzeit vor. Ich habe einfach den Standard-No-Parameters-Konstruktor in meinen DTO-Klassen vergessen. Durch das Hinzufügen dieses Konstruktors, ähnlich wie bei JPA-Entitäten, wurde mein Problem gelöst und die Deserialisierung JSON->Object funktioniert jetzt.

Ich bin mir nicht sicher, ob dies Ihr Fall ist, wenn Sie Ihren Code betrachten, aber es könnte für andere Leute nützlich sein, die sich hier die 415 + JSON-Ausgabe ansehen

3
Fabiano Tarlao

Ich neige dazu, hinzuzufügen

@Produces({"application/json"})

zu meinen Diensten gegen die Top-Level-Klassendeklaration und überschreiben Sie sie gegebenenfalls.

z.B.

@Path("/foo")
@Produces({"application/json"})
public class FooRestService {
0
Iain T

Obwohl es eine dumme Erfahrung sein könnte, sie mitzuteilen, werde ich sie weitergeben, falls sie jemandem den Tag rettet.
Ich hatte eine Reihe aufeinander folgender Funktionen, die erste war mit der Annotation @BodyParser.Of(BodyParser.Json.class). Als ich die erste Funktion kommentierte, wurde die Annotationszeile irrtümlich unkommentiert gelassen, so dass eine solche Annotation auf diese zweite Funktion angewendet wurde, die einen solchen 415-Medientypfehler zur Folge hatte
hth

0
Hasnaa Ibraheem

Okay, es gibt Fehlercodes, die häufig während der Inhaltsverhandlung auftreten. 1) 406 - Nicht akzeptabel 2) 415 - Nicht unterstützter Medientyp

406 ist, wenn der Server den Inhaltstyp nicht akzeptiert, der unter dem ACCEPT-Header der Anforderung gesendet wird.

415 ist, dass der Client einen Inhaltstyp im Anforderungsheader sendet, und der Server lehnt daher den Ausdruck eines nicht unterstützten Medientyps direkt ab

406 überwinden - wir müssen die entsprechenden abhängigen jars einschließen, beispielsweise, ein Client möchte, dass eine XML-Eingabe vom Server verstanden wird, dann muss der Server XML-abhängige Abhängigkeiten haben.

415 - die Medientypen, die vom Server unterstützt werden, verstehen und den richtigen Medientyp im Inhaltstyp-Header der Anforderung übergeben

0
Kapil Reddy

Möglicherweise haben Sie keinen Pfad für die API-Funktion angegeben. Sie haben nur den Ressourcenpfad in Ihrem Code angegeben.

@POST
@Path("/somepath")
@Consumes(MediaType.APPLICATION_JSON)
public Response readData (Song song) {
  ...
}
0
user3811473