2016-07-02 2 views
3

Пожалуйста, принесите немного терпения со мной, я знаю, что таких вопросов уже так много, и я не смог решить свою проблему, которая кажется такой простой и я не уверен, чего не хватает (потратил часы, пытаясь понять это). Я использовал следующий архетипа Maven для создания проекта:Джерси с гризли: получение MessageBodyWriter не найдено для типа носителя = application/json

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 -DarchetypeGroupId=org.glassfish.jersey.archetype 

В файле pom.xml, я раскомментировал Moxy зависимости для поддержки JSON

<dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-moxy</artifactId> 
</dependency> 

Затем я добавил класс, человек, как ниже:

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class Person { 

    private String firstName; 
    private String lastName; 

    public Person(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
} 

MyResource.java выглядит, как показано ниже:

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

@Path("myresource") 
public class MyResource { 

    @Path("/person") 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Person getPerson() { 
     return new Person("FistName","LastName"); 
    } 

} 

Я затем запустить приложение и выпуск следующих способов для получения Person:

http://localhost:8080/myapp/myresource/person 

Установка выглядит так просто, но это разве работает, за исключением следующего:

org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo SEVERE: MessageBodyWriter not found for media type=application/json, type=class jersey.grizzly.Person, genericType=class jersey.grizzly.Person. 

Я не был в состоянии чтобы выяснить, что мне не хватает (и прошли многие предложенные ответы безрезультатно) и могли использовать другой набор глаз/перспективы.

+0

Я знаю, что конструктор по умолчанию требуется для читателя, но я не уверен, о писателе. Вы можете попробовать добавить конструктор по умолчанию в класс модели. –

+0

Спасибо @peeskillet, это была проблема. Я не могу поверить, что я попал в ловушку этого. –

+0

Учитывая, что ответ был в комментарии, как я отмечаю это как ответил? @peeskillet, вы хотите, чтобы оставить комментарий вместо этого, чтобы я закрыл это? (Если есть другой способ добиться того же, когда ответ в комментарии) –

ответ

1

Данное MOXy является производным от JAXB, а JAXB требует конструкторов no-arg (default) для своих типов, у вас должен быть конструктор no-arg в ваших классах моделей.

Смотрите также

Смежные вопросы