В момента се опитвам да създам webservice, която просто връща списък;
@Path("/random")
@Singleton
public class Random
{
@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
public MyResult<String> test()
{
MyResult<String> test = new MyResult<String>();
test.add("Awesome");
return test;
}
}
Моят MyResult клас изглежда така:
@XmlRootElement
public class MyResult<T> implements Iterable<T>
{
private ArrayList<T> _items;
private int _total;
public MyResult()
{
_items = new ArrayList<T>();
}
public ArrayList<T> getItems()
{
return _items;
}
public void setItems(ArrayList<T> items)
{
_items = items;
}
public int getTotal()
{
return _total;
}
public void setTotal(int total)
{
_total = total;
}
public void add(T item)
{
getItems().add(item);
}
public Iterator<T> iterator()
{
return getItems().iterator();
}
}
Сега получавам следния резултат от услугата:
{"items":[{"@type":"xs:string","$":"Awesome"}],"total":"0"}
Но аз не искам тази информация, просто искам това:
{"items":["Awesome"],"total":"0"}
Струва ми се, че това изисква някъде някаква конфигурация, които знаят как да получат желания резултат?
Отговори:
5 за отговор № 1Ако приемем, че използвате Джексън, погледнете @JsonTypeInfo анотация. Той се използва за конфигуриране на подробности за това дали и как се използва тип информация с JSON сериализация и десериализация. Използването и поведението му ще зависят от версията на jackson, която използвате.
0 за отговор № 2
За да премахнем напълно информацията за типа, трябваше да използвам следните пояснения:
@JsonTypeInfo(use=JsonTypeInfo.Id.NONE)
@JsonDeserialize(as=NoType.class)