[英]Returning XML from DB Result-Set in REST Resource
我正在嘗試從REST資源(Jersey 2.x)以XML形式返回DB結果集為XML,但是我一直得到一個空結果。 日志文件中沒有錯誤。
郵遞員還返回:200 OK。 沒有錯誤。 發送到服務器的請求傳遞一個參數,該參數是userId:localhost:8080 / messenger / webapi / v1 / messages / userProfile?u = 21
ResultSet myRs;
StringWriter sw;
@Path("/userProfile")
@GET
@Produces(MediaType.APPLICATION_XML)
public String returnUserProfile(@QueryParam("u") int u) throws Exception {
DocumentBuilderFactory theFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = theFactory.newDocumentBuilder();
Document document = builder.newDocument();
Element results = document.createElement("Results");
try {
conn = DaoMessenger.PostGresCon().getConnection();
query = conn.prepareStatement ("SELECT * FROM users WHERE id ='" + u + "'" );
ResultSet profileResult = query.executeQuery();
ResultSetMetaData rsmd = profileResult.getMetaData();
int columns = rsmd.getColumnCount();
while (profileResult.next()) {
Element theRow = document.createElement("Row");
System.out.println("ROW -----> " + theRow);
results.appendChild(theRow);
for(int i = 1; i <= columns; i++){
String columnName = rsmd.getColumnName(i);
Object value = profileResult.getObject(i);
Element nd = document.createElement(columnName);
nd.appendChild( document.createTextNode( value.toString() ) );
theRow.appendChild(nd);
System.out.println("NODE: " + nd);
}
System.out.println("RESULTS ----> " + results);
}
DOMSource domSource = new DOMSource(document);
TransformerFactory tf = TransformerFactory.newInstance();
javax.xml.transform.Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
sw = new StringWriter();
StreamResult sr = new StreamResult(sw);
transformer.transform(domSource, sr);
System.out.println("sw.toString(): " + sw.toString());
query.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) conn.close();
}
return sw.toString();
}
有什么想法嗎? 我應該將“方法類型”更改為:“響應”並更改返回的類型嗎?
澤西開箱即用地支持XML
(通過JAXB
),因此無需手動將對象轉換為xml表示形式。 這個過程很簡單,涉及
POJO
您的POJO
@XmlRootElement
class MyPOJO{
//fields and getters/setters
}
您的網絡服務方法
@Path("/userProfile")
@GET
@Produces(MediaType.APPLICATION_XML)
public MyPOJO returnUserProfile(@QueryParam("u") int u){
MyPOJO myPojo = new MyPOJO();
//populate myPojo's fields
//you will access your DB to populate the fields
return myPojo;
}
}
請注意,您的WS方法將返回MyPOJO的實例,而不是String。 當然,該框架會將其轉換為XML
表示形式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.