0
我有一個使用Jersey的Java Webservice。 現在我想發送地圖(行和列)到客戶端的地圖。Java Webservice - Jersey XmlAdapter用於映射地圖
一切正常,當我離開它,因爲它是。但隨後XMLOutput看起來像這樣...
data>
<entry>
<key>0</key>
<value>
<data>
<entry>
<key>id</key>
<value>20</value>
</entry>
<entry>
<key>status</key>
<value>test</value>
</entry>
<entry>
<key>number</key>
<value>20</value>
</entry>
<entry>
<key>cars</key>
<value>3</value>
</entry>
</data>
</value>
</entry>
</data>
不過,我想有這樣的事情...
<data>
<entry row=0>
<column name=id>20</column>
<column name=status>OK</column>
<column name=number>1</column>
<column name=cars>1</column>
</entry>
<entry row=1>
<column name=id>21</column>
<column name=status>OK</column>
<column name=number>1</column>
<column name=cars>2</column>
</entry>
<entry row=2>
<column name=id>22</column>
<column name=status>OK</column>
<column name=number>1</column>
<column name=cars>3</column>
</entry>
</data>
爲了控制XML輸出我想使用XmlAdapters但我不」讓它工作。
類,它包含的行:
public class CoDataMap {
public LinkedHashMap<String, String> data = new LinkedHashMap<String, String>();
}
我怎麼會寫XmlAdapter和類型正確編組的對象:包含列
public class CoDataList{
public LinkedHashMap<Integer, CoDataMap> data = new LinkedHashMap<Integer,CoDataMap>();
}
類?
我做了這樣的事......但我在哪裏添加下一個XmlAdapter?
MainClass包含的行和列
@XmlRootElement
public class Response implements Cloneable{
@XmlJavaTypeAdapter(CoDataListAdapter.class)
public CoDataList data = new CoDataList();
}
現在我寫的CoDataList和CoDataMap適配器:
public class CoDataListAdapter extends XmlAdapter<CoDataListType, CoDataList>{
@Override
public CoDataListType marshal(CoDataList v) throws Exception {
CoDataListType rows = new CoDataListType();
for (int currentRow : v.data.keySet()){
CoDataListEntryType row= new CoDataListEntryType();
row.key = currentRow;
row.map = v.data.get(currentRow);
rows.entry.add(row);
}
return rows;
}
@Override
public CoDataList unmarshal(CoDataListType v) throws Exception {
// TODO Auto-generated method stub
return null;
}
}
public class CoDataMapAdapter extends XmlAdapter<CoDataMapType, CoDataMap> {
@Override
public CoDataMapType marshal(CoDataMap v) throws Exception {
CoDataMapType columns = new CoDataMapType();
for (String curCol : v.data.keySet()){
CoDataMapEntryType column= new CoDataMapEntryType();
column.key = curCol;
column.value = v.data.get(curCol);
columns.entry.add(column);
}
// TODO Auto-generated method stub
return columns;
}
@Override
public CoDataMap unmarshal(CoDataMapType v) throws Exception {
//...
}
}
public class CoDataListType {
public List<CoDataListEntryType> entry = new ArrayList<CoDataListEntryType>();
}
public class CoDataListEntryType {
@XmlAttribute(name="row")
public Integer key;
@XmlValue
@XmlJavaTypeAdapter(CoDataMapAdapter.class)
public CoDataMap map;
}
在這一點上我得到一個異常:
@ XmlAttribute/@ XmlValue需要引用映射在XML.xmladapter
文本Java類型
public class CoDataMapType {
public List<CoDataMapEntryType> entry = new ArrayList<CoDataMapEntryType>();
}
public class CoDataMapEntryType {
@XmlAttribute(name="column")
public String key;
@XmlValue
public String value;
}
我真的很感謝你的幫助,我不知道如何讓它工作。謝謝