У меня есть:
@XmlRootElement( name = "list" )
@XmlAccessorType(XmlAccessType.FIELD)
public class JaxbList<T> implements Serializable{
private static final long serialVersionUID = -7054818420430302896L;
@XmlAnyElement
private Collection<T> list;
}
и,
@XmlRootElement(name="payload")
public class Payload<T> implements Serializable {
private static final long serialVersionUID = -2919689796111868862L;
@XmlTransient
private T data;
}
и,
@XmlRootElement (name="data")
public class PayloadData<T> implements Serializable {
@XmlTransient
private T value;
@XmlTransient
private URI uri;
public PayloadData() {}
@XmlAnyElement (lax = true )
@XmlMixed
public T getValue() {
return value;
} ...
}
, которые я использую вот так:
@GET
public Response getWorkspaces(@Context UriInfo uriInfo) {
JaxbList<PayloadData<WorkspaceInfo>> workspaces = new JaxbList<PayloadData<WorkspaceInfo>> ( new ArrayList<PayloadData<WorkspaceInfo>>( dbData) );
return Response.ok().entity( new Payload( workspaces ) ).build();
}
Мой вывод JSON для конечной точки GET неверен.XML в порядке.Вывод XML:
<payload>
<list>
<data>
<uri>http://localhost:8080/api/rest/v1/workspaces/1/items</uri>
<data>
<id>1</id>
<category>Cat1</category>
<label>WKS1</label>
</data></data>
<data>
<uri>http://localhost:8080/api/rest/v1/workspaces/2/items</uri>
<data>
<id>2</id>
<category>Cat2</category>
<label>WKS2</label>
</data>
</data>
</list>
</payload>
Неправильный JSON:
{
"list":{
"data":{
"uri":"http://localhost:8080/api/rest/v1/workspaces/1/items.json",
"data":{
"id":1,
"category":"Cat1",
"label":"WKS1"
}
},
"data":{
"uri":"http://localhost:8080/api/rest/v1/workspaces/2/items.json",
"data":{
"id":2,
"category":"Cat2",
"label":"WKS2"
}
}
}
}
Вы можете видеть, что вместо создания массива JSON элемент данных представляет собой просто серию объектов стот же ключ "data", а не массив json, заключенный в [] .То есть, один возможный ожидаемый вывод JSON:
{
"list":[
{"data":{
"uri":"http://localhost:8080/api/rest/v1/workspaces/1/items.json",
"data":{
"id":1,
"category":"Cat1",
"label":"WKS1"
}
}
},
{"data":{
"uri":"http://localhost:8080/api/rest/v1/workspaces/2/items.json",
"data":{
"id":2,
"category":"Cat2",
"label":"WKS2"
}
}
}
]
}
Есть идеи, что здесь может быть не так?