Для класса ответа ArrayList не найдено средство записи тела сообщения - PullRequest
12 голосов
/ 16 февраля 2012

Пока я пытаюсь вернуть List, он выбрасывает. Не найдено средство записи тела сообщения для класса ответа ArrayList.

У меня есть следующий код:

@POST 
@Path("/{scope}/{application}/tables")
@Produces("application/xml")
public List<String> getTableNames(@PathParam("scope") String scope,
    @PathParam("application") String application, Request request) {

    // For example, I am returning a list of String
    return new ArrayList<String>(4);
}

Пожалуйста, помогите мне. Заранее спасибо

Ответы [ 7 ]

19 голосов
/ 16 февраля 2012

Чтобы вернуть список, лучше всего обернуть его в аннотированный контейнер @XmlRootElement и дать этому контейнеру свой список в виде поля, аннотированного как @XmlElement.

Например:

@XmlRootElement
public class Container {
    @XmlElement
    public List yourlist;
}
4 голосов
/ 16 февраля 2012

См. это , его JAXB, который доставляет вам проблемы, он не знает, как разобрать / маршалировать Список.

1 голос
/ 11 июня 2015

Я решил это с помощью JacksonJaxbJsonProvider.Код Java не нужно изменять.Всего несколько изменений в Spring context.xml и Maven pom.xml, см. https://stackoverflow.com/a/30777172/1245231

0 голосов
/ 04 октября 2018

Добавить эту зависимость Maven:

<init-param>
    <param-name>jaxrs.providers</param-name>
    <param-value>org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider</param-value>
</init-param>
0 голосов
/ 23 марта 2016

Я добавил Список в существующий объект области проекта доменного уровня.

Это было более контекстно для проекта, а также работало «из коробки»: не нужно тестировать XmlRootElement, но добавьте данные теста + логику для списка существующих тестов для этого объекта.

0 голосов
/ 24 апреля 2014

Чтобы избежать упаковки, можно использовать Джексона.О том, как это сделать, вы можете следить за моим ответом на похожий вопрос.

0 голосов
/ 14 ноября 2013

Попробуйте использовать GenericEntity.

Response.ok(new GenericEntity<List<String>>(yourCollectionOfStrings) {}).build();
...