2014-11-15 2 views
0

При попытке отправить сообщение на сервер ответ: Неподдерживаемый тип носителя. (415)Запрос на отправку REST

{ 
    "street": "Alex", 
    "picture": "fsdfs" 
} 

Я использую Jersey 2.7. Это Okey, когда я вызываю GET, но проблема связана с методом POST. В проекте я включил org.glassfish.jersey.media:jersey-media-json-jackson и иль \ микробатареях код, как в this topic

public static void main(String[] args) throws Exception, RuntimeException { 
     final Application application = new ResourceConfig() 
       .packages("org.template") 
       .register(JacksonFeature.class); 

     server = new Server(PORT_NUMBER); 
     ServletContextHandler servletContextHandler = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS); 
     servletContextHandler.addFilter(GuiceFilter.class, "/*", EnumSet.allOf(DispatcherType.class)); 
     servletContextHandler.addServlet(DefaultServlet.class, "/*"); 

     server.start(); 
     server.join(); 

    } 

Simple API:

 @Path("/test") 
     @Produces(MediaType.APPLICATION_JSON) 
     @Consumes(MediaType.APPLICATION_JSON) 
     public class ExampleAPI { 

      @GET 
      @Path("hello") 
      @Produces(MediaType.TEXT_PLAIN) 
      public String hello() { 
       return "Hello World"; 
      } 

      @POST 
      @Path("/create") 
    public Response create(BeanInfo bean) { 

     return Response.created(UriBuilder.fromResource(BeanInfo.class) 
       .path("{picture}").build(bean.getPicture())) 
       .entity(bean.toString()) 
       .build(); 
    } 
} 

Что здесь не так ? Должен ли я сопоставлять объекты с json?

BeanInfo:

@JsonProperty("picture") 
    private final String picture; 

    @JsonProperty("street") 
    private final String street; 
    ... 

ответ

2

Это, вероятно, потому, что вы неправильно установки заголовка Content-Type, когда вы звоните, к вашим услугам. Вы должны установить его в «application/json». На мой взгляд, ваша серверная сторона правильно определена, и проблема сидит на вашей стороне клиента и как она вызывает API.

415 Неподдерживаемый Тип носителя

415 (Неподдерживаемый Тип носителя) код состояния указывает на то, что сервер происхождения отказывается обслуживать запрос, потому что полезная нагрузка в формате, который не поддерживается этим методом на целевого ресурса. Проблема формата может быть связана с указанным запросом Content-Type или Content-Encoding или в результате непосредственного контроля данных .

+0

мой клиент «Почтальон остальное клиент», поэтому я считаю, это ОКЕЙ – qwerty12345

+0

Хорошо, но вы должны настроить его правильно. Я использую Postman для тестирования своих API, так что посмотрите на это изображение, чтобы посмотреть, как его правильно настроить (обратите внимание на часть «Заголовок») -> [Изображение на TinyPic] (http://tinypic.com/r/2dsqtg1/8) – Marlon

+0

Проблема была в классе bean. – qwerty12345

1

Проблема была с классом бобов. Я использовал шаблон построения, и Джексон не смог его расшифровать. Я добавил аннотацию классу и строителю и теперь отлично работает.

@JsonDeserialize(builder = BeanInfo.Builder.class) 
public class BeanInfo{ ... 

и строитель:

@JsonPOJOBuilder(buildMethodName = "build", withPrefix = "set") 
public static class Builder {... 
Смежные вопросы