2015-03-28 2 views
2

Я использую последнюю версию Джерси, чтобы реализовать некоторые примеры услуг REST.
Есть ли у вас какие-либо понятия, почему, когда я генерировать следующий запрос HTTP с помощью Fiddler, я получаю:
500 Internal Server ErrorJSON не сгенерирован в использовании Джерси

MessageBodyWriter not found for media type={application/json, q=1000}, type=class java.util.ArrayList, genericType=java.util.ArrayList<com.example.Todo> 

запрос HTTP:

GET http://localhost:8080/RestProject/rest/todos/1 HTTP/1.1 
Connection: close 
Accept: application/json 
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/41.0.2272.101 Safari/537.36 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4 
Host: localhost:8080 

Это метод Rest вызывался:

//This method is called if XML or JSON is requested 
    @GET 
    @Path("{id}") 
    @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON,MediaType.TEXT_XML}) 
    public Todo getEntityXMLOrJSON(@PathParam("id") int id) 
    { 
    Todo todo = new Todo(); 
    todo.setSummary("This is my first todo " + id); 
    todo.setDescription("This is my first todo"); 
    return todo; 
    } 

Когда я запрашиваю данные xml, все работает нормально.

EDIT:

enter image description here

+1

Я думаю, что это должно помочь: http://stackoverflow.com/questions/26518996/jersey-json-serialization – bbastu

+0

вопрос отредактирован – GionJh

+1

Есть ли у вас какие-либо StackTrace вы можете показать нам. Как правило, 500 будет означать, что исключение в большинстве случаев заносится в журнал. –

ответ

2

Я довольно хорошо знаком с учебником Vogella. Так много людей опубликовано об этом. Он использует Джерси 2. Вы пытаетесь добавить в проект несколько банок на Джерси. Возьмите все, что вы добавили самостоятельно. Затем найдите и добавьте эти

enter image description here

И если вы используете web.xml, затем зарегистрировать поставщик, как так

<param-name>jersey.config.server.provider.packages</param-name> 
<param-value> 
    com.jersey.jaxb,com.fasterxml.jackson.jaxrs.json 
</param-value> 

добавления инициализации параметров в джерси сервлет. В противном случае, с помощью Java-конфигурации, в вашем ResourceConfig, просто

register(JacksonJaxbJsonProvider.class); 

Это для поддержки аннотаций JAXB. Если вам это не нужно, то вы можете просто использовать JacksonJsonProvider

+0

Если я использую джерси 2, то все эти банки Джексона не нужны, не так ли? – GionJh

+1

You _are_ using Jersey 2. Главное, что вам нужно, это провайдер, который является «jackson-jaxrs-json-provider». Но эта банка зависит от всех других банок. Это основные банки Джексона.Поставщик не может жить сам по себе –

+1

С Джерси 1, будет использовать 'jersey-json', который вы пытались добавить. Но даже это зависит от некоторых банок Джексона, которых у вас нет –

0

Моим решением было добавление следующих зависимостей;

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet-core</artifactId> 
    <version>your jersey version</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>your jersey version</version> 
</dependency> 
Смежные вопросы