Pertanyaan REST Webservice mengembalikan 415 - Jenis Media Tidak Didukung


Saya telah membuat webservice REST menggunakan jax-rs dan jersey yang seharusnya mengkonsumsi JSON pada permintaan POST. Kelas layanan web saya terlihat seperti ini:

@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;

    }

}

Kelas Song saya:

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; }

}

Web.xml saya (jika diperlukan)

<?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>

saya menggunakan RESTClient sedikit, baik, istirahat klien ... Berikut screenshot dari apa yang saya kirim:

enter image description here

Ketika saya mengirimkan itu, saya mendapatkan 415 Jenis Media Tidak Didukung kesalahan. Ada yang punya ide kenapa?


13
2017-07-24 11:11


asal


Jawaban:


Anda harus mengirim header permintaan Content-Type: application/json. Sepertinya REST-Client tidak menambahkan tajuk ini secara otomatis untuk Anda.


35
2017-07-24 12:37



Seperti yang orang lain tunjukkan, Anda kehilangan header yang benar. Menambahkan Content-Type: application/json ke "Header": enter image description here


7
2018-01-13 23:29



Saya memiliki hal yang sama 415 waktu kesalahan http lalu. Saya hanya lupa konstruktor tanpa-parameter default di kelas DTO saya. Menambahkan konstruktor itu, dengan cara yang sama seperti untuk entitas JPA, memecahkan masalah saya dan de-serialisasi JSON->Object bekerja sekarang.

Saya tidak yakin ini adalah kasus Anda, melihat kode Anda, tetapi itu bisa berguna untuk orang lain yang jatuh di sini melihat masalah 415 + JSON. Salam


2
2018-02-15 21:03



Mungkin karena Anda belum menentukan jalur untuk fungsi API. Anda hanya menetapkan jalur sumber daya di kode Anda.

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

0
2017-07-24 12:10



Saya cenderung menambahkan

@Produces({"application/json"})

ke layanan saya terhadap deklarasi Kelas tingkat atas dan menimpa jika perlu.

misalnya

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

0
2017-07-24 14:38



Ok jadi ada kode kesalahan yang biasanya muncul selama negosiasi konten 1) 406 - Tidak dapat diterima 2) 415 - Jenis Media Tidak Didukung

406 adalah ketika server tidak menerima jenis konten yang sedang dikirim di bawah header MENERIMA permintaan.

415 adalah klien mengirimkan tipe konten di header permintaan dan server langsung menolak mengatakan jenis media yang tidak didukung

untuk mengatasi 406 - kita harus menyertakan guci tergantung yang sesuai, katakanlah klien menginginkan input XML untuk dipahami oleh server, maka server harus memiliki dependensi terkait XML.

untuk mengatasi 415 - memahami jenis media yang didukung oleh server dan meneruskan jenis media yang benar di header tipe konten dari permintaan


0
2018-04-03 20:21