簡體   English   中英

從REST資源中的數據庫結果集中返回XML

[英]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
  • 從您的Web服務填充並返回此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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM