Возвращать список объектов при использовании JAX-RS - PullRequest
8 голосов
/ 17 ноября 2011

Как я могу вернуть список объектов Вопроса в XML или JSON?

@Path("all")
@GET
public List<Question> getAllQuestions() {
    return questionDAO.getAllQuestions();
}

Я получаю это исключение:

SEVERE: сопоставленное исключение для ответа: 500 (внутренняя ошибка сервера) javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: составитель тела сообщения для Java класс java.util.Vector и тип Java java.util.List и MIME media тип приложения / октет-поток не найден

Ответы [ 4 ]

7 голосов
/ 17 ноября 2011

Попробуйте:

@Path("all")
@GET
public ArrayList<Question> getAllQuestions() {
    return (ArrayList<Question>)questionDAO.getAllQuestions();
}

Если ваша цель - вернуть список предметов, которые вы можете использовать:

@Path("all")
@GET
public Question[] getAllQuestions() {
    return questionDAO.getAllQuestions().toArray(new Question[]{});
}

Редактировать Добавлен оригинальный ответ выше

6 голосов
/ 27 августа 2012

Та же проблема в моем случае была решена путем добавления параметра инициализации POJOMappingFeature в сервлет REST, поэтому он выглядит следующим образом:

<servlet>
    <servlet-name>RestServlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
</servlet>

Теперь он работает даже с возвратом List в Weblogic 12c.

3 голосов
/ 23 сентября 2015

Прежде всего, вы должны установить правильную аннотацию @Produces. Во-вторых, вы можете использовать GenericEntity для сериализации списка.

@GET
@Path("/questions")
@Produces({MediaType.APPLICAtION_XML, MediaType.APPLICATION_JSON})
public Response read() {

    final List<Question> list; // get some

    final GenericEntity<List<Question>> entity
        = new GenericEntity<List<Question>>() {};

    return Response.ok(entity).build();
}
0 голосов
/ 17 ноября 2011

Ваш веб-сервис может выглядеть так:

@GET
@Path("all")
@Produces({ "application/xml", "application/*+xml", "text/xml" })
public Response getAllQuestions(){
 List<Question> responseEntity = ...;
 return Response.ok().entity(responseEntity).build();
}

тогда вам нужно создать провайдера MessageBodyWriter:

@Produces({ "application/xml", "application/*+xml", "text/xml" })
@Provider
public class XMLWriter implements MessageBodyWriter<Source>{

}
...