2014-07-24 15 views
13

Tôi đã tạo một RESTservice REST bằng cách sử dụng jax-rs và jersey được cho là sử dụng JSON trên một yêu cầu POST. My lớp dịch vụ web trông như thế này:REST Webservice trả về 415 - Loại phương tiện không được hỗ trợ

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

    } 

} 

My Sông lớp:

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 của tôi (nếu cần thiết)

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

Tôi đang sử dụng RESTClient một chút, cũng , khách hàng còn lại ... Đây là ảnh chụp màn hình của những gì tôi đang gửi:

enter image description here

Khi tôi gửi đi, tôi gặp lỗi 415 Loại phương tiện không được hỗ trợ. Bất kỳ ai có một ý tưởng tại sao?

+1

Khách hàng có gửi tiêu đề 'Content-Type: application/json' không? – lefloh

+0

Bạn biết những gì bạn có thể đúng. Hãy để tôi xem – Tiwaz89

+0

@lefloh - Bạn là người chiến thắng! Bạn đã đúng, tôi thậm chí không biết bạn cần phải đặt nó trong các ứng dụng khách hàng nhỏ. Bạn có thể đăng bài như một câu trả lời và tôi sẽ chấp nhận. Cảm ơn! – Tiwaz89

Trả lời

33

Bạn cần gửi tiêu đề yêu cầu Content-Type: application/json. Có vẻ như REST-Client không tự động thêm tiêu đề này cho bạn.

+0

Cách thêm kiểu nội dung lập trình trong android – Sarvesh

0

Có thể do bạn chưa chỉ định đường dẫn cho chức năng API. Bạn chỉ xác định đường dẫn tài nguyên trong mã của mình.

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

Theo tôi biết đây là tùy chọn nhưng không bắt buộc. Tôi sẽ thử một cách không nontheless – Tiwaz89

0

tôi có xu hướng để thêm

@Produces({"application/json"}) 

với các dịch vụ của tôi chống lại việc khai báo lớp cấp cao nhất và ghi đè khi thích hợp.

ví dụ:

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

Như những người khác đã chỉ ra, bạn đang thiếu tiêu đề chính xác. Thêm Content-Type: application/json đến "Headers": enter image description here

2

tôi đã cùng 415 http lỗi thời gian trước đây. Tôi chỉ đơn giản là quên constructor không có tham số mặc định trong các lớp DTO của tôi. Thêm hàm tạo đó, theo cách tương tự như đối với các thực thể JPA, đã giải quyết được vấn đề của tôi và hủy tuần tự hóa JSON->Object hoạt động ngay bây giờ.

Tôi không chắc đây là trường hợp của bạn, nhìn vào mã của bạn, nhưng nó có thể hữu ích cho những kẻ khác rơi xuống đây nhìn vào vấn đề 415 + JSON. Trân trọng

+1

Câu trả lời của bạn đã cứu tôi rất nhiều lần gỡ lỗi: D –

+0

Bạn được chào đón :-) –

Các vấn đề liên quan