Для класса ответа ArrayList не найдено ни одного автора тела сообщения

В то время как я пытаюсь вернуть 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);
}

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

Ответ 1

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

Так же:

@XmlRootElement
public class Container {
    @XmlElement
    public List yourlist;
}

Ответ 2

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

Ответ 3

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

Ответ 4

Я решил это с помощью JacksonJaxbJsonProvider. Код Java не должен изменяться. Всего несколько изменений в Spring context.xml и Maven pom.xml, см. fooobar.com/questions/123149/...

Ответ 5

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

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

Ответ 6

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

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