Я пытаюсь вернуть список строк в Джерси как JSON и XML. Я думал, что это будет тривиально.
Моя первая попытка была написать что-то вроде этого
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/bar")
public List<String> get() {
return dao.get();
}
и я ожидал вывода, аналогичного этому: [ "string1",..., "stringN] к сожалению, я получил это:
com.sun.jersey.api.MessageException: A message body writer for Java class java.util.LinkedList, and Java type java.util.List<java.lang.String>, and MIME media type application/json was not found
Затем я написал оболочку StringList для List
@XmlRootElement
public class StringList {
private List<String> data;
public StringList() {
}
public StringList(List<String> data) {
this.data = data;
}
public List<String> getData() {
return data;
}
public void setData(List<String> data) {
this.data = data;
}
}
и изменил фасад на
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/foo")
public StringList stringlist() {
return new StringList(sl());
}
Что отлично подходит для списков с большим количеством элементов, чем 1.
{"data":["foo","bar"]}
К сожалению, я получаю два невыраженных результата для одного или нулевого элемента
{"data": "just one"} // for one element i would expect {"data": ["just one"]}
null // for no elements i would expect {"data": []}
Я делаю что-то совершенно неправильно? Как я могу это исправить?