2012-08-01 67 views
2

我創建了一個Web服務功能:如何創建返回xml以及json的webservice函數?

@GET 
@Path("getusers/") 
@Produces({"application/xml","application/json"}) 
public Object getUsers() 
{ 
    String distanceQuery="SELECT UGL.user_id,UP.fname,UGL.mlatitude,UGL.mlogitude,UGL.mlogitude from user_gps_location UGL,user_profile UP where UGL.user_id=UP.user_id"; 
    Query queryResult=em.createNativeQuery(distanceQuery); 

    userList=queryResult.getResultList(); 
    return userList; 
} 

該函數返回結果的列表: 而我選擇應用程序/ JSON選擇它的工作原理,如果我與我的瀏覽器中測試其罰款:

結果:

[[1,"Ankit",37.334542,-121.890821,-121.890821], 
[1,"Ankit",37.337749,-121.886702,-121.886702], 
[1,"Ankit",37.336453,-121.884985,-121.884985], 
[1,"Ankit",37.336453,-121.884985,-121.884985], 
[1,"Ankit",37.336453,-121.884985,-121.884985], 
[1,"Ankit",32.727798,-117.15683,-117.15683], 
[1,"Ankit",37.334541666666674,-121.89081999999999,-121.89081999999999], 
[1,"Ankit",37.33774833333334,-121.88670166666667,-121.88670166666667], 
[1,"Ankit",37.33774833333334,-121.88670166666667,-121.88670166666667], 
[1,"Ankit",37.334541666666674,-121.89081999999999,-121.89081999999999], 
[1,"Ankit",37.334541666666674,-121.89081999999999,-121.89081999999999], 
[1,"Ankit",37.33774833333334,-121.88670166666667,-121.88670166666667], 
[2,"Niharika",37.334541666666674,-121.88670166666667,-121.88670166666667], 
[2,"Niharika",37.334541666666674,-121.88670166666667,-121.88670166666667]] 

但是當我選擇 「應用程序/ XML」 它給了我一個錯誤:

javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.Vector, and Java type class java.util.Vector, and MIME media type application/xml was not found 

任何人都可以幫助我,告訴我它有什麼問題嗎?

另外我如何可以返回一個良好的結果如下?

<id>1</id> 
<name>Ankit</name> 

我知道我需要使用一類,但因爲這是一個本機查詢和我用兩個表,並返回一個結果列表,我不知道該怎麼做。

回答

2

嘗試改變

public Object getUsers() 

public List<MyObjectType> getUsers() 

匹配類型的用戶列表。

此外,還要確保@XMLRootElement註釋存在於域類

+0

Ya @XMLRootElement存在於域類中。你可以告訴我公開列表我會在列表中提到哪個類對象,因爲我上面提到我的查詢有兩個表user_gps_location和user_profile我不知道如何映射它們與返回結果。 – user1522804 2012-08-02 00:30:15

+0

類型爲列表,用於跨多個表格進行選擇。 – Reimeus 2012-08-02 00:43:06

+0

沒有它的工作後,將其更改爲列表,並給我以下錯誤:java.lang.ClassCastException:sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl不能轉換爲java.lang.Class而在瀏覽器它給我下面的錯誤msg:響應:{ HTTP狀態406 - 不可接受 } – user1522804 2012-08-02 00:55:26

0

我曾經有過類似的問題。問題的原因是我錯過了一些圖書館。 (我無法生成JSON,我錯過了jersey-json依賴關係)。通過添加依賴關係,解決了問題。

檢查是否可以產生XML用一個簡單的方法是這樣的:

@GET 
@Path("test") 
@Produces(MediaType.APPLICATION_XML) 
public List<String> test() 
{ 
    List<String> test = new ArrayList<String>(); 
    test.add("string 1"); 
    test.add("string 2"); 
    return test; 
} 

如果你不能用這種方法生成XML嘗試加入jersey-core-1.13作爲Maven的依賴性:

<dependency> 
    <description></description> 
    <groupId>com.sun.jersey</groupId> 
    <artefactId>jersey-core</artefactId> 
    <version>1.13</version> 
</dependency> 

如果」可以自由選擇使用哪種JAX-RS實現我強烈建議看看RESTEasy。它提供了許多很酷的功能,如bean驗證,並提供了一個非常易於使用的客戶端庫。

+0

嘿,如你所說,我添加了測試()方法,正如你提到的球衣-core-1.13作爲Maven依賴項,我將jersey-core-1.13.jar添加到我的netbeans項目類庫中,然後運行webservice,但仍然沒有得到xml輸出。在這裏,我只是想知道我是否正確地將jersy-core-1.13添加到庫中,還是需要進一步的步驟?如果沒有,正如你所說,我應該在以上寫什麼東西? – user1522804 2012-08-03 18:21:33

+0

''是Maven的依賴項。 Maven是一個非常常見且相當容易的構建和依賴管理。 Netbeans默認使用Ant(iirc)。 – siebz0r 2012-08-03 18:29:03