2012-12-21 58 views
0

我很難設置某些東西,我很確定/應該/很容易,所以我想我會把它扔給人羣。我似乎無法找到我在網絡上或SE上尋找的其他東西。Jersey REST方法的複雜(非字符串)返回類型

我簡化我的課程項目,但基本上我有一個JAX-WS annontated,看起來像這樣澤西資源類:

@Path("myresource") 
public class MyResource { 

    @Autowired 
    MyComplexObjectDAO daoInstance; 

    @Path("findObject/{id}") 
    @GET 
    public MyComplexObject findObject(@PathParam(value="id") String id) { 
     return daoInstance.findObject(id); 
    } 

    @Path("saveObject") 
    @PUT 
    public MyComplexObject saveObject(MyComplexObject objectToSave) { 
     MyComplexObject savedObject = daoInstance.saveObject(objectToSave); 
     return savedObject; 
    } 

} 

所以你可以看到我使用的是自動裝配春天一個DAO對象,然後在REST處理程序中使用DAO方法。

'findObject'調用似乎工作正常 - 到目前爲止它的工作原理與我預期的完全相同。

'saveObject'調用不按我想要的方式工作,這就是我需要一些建議。

您可以看到我試圖直接將我的複雜對象的實例作爲參數傳遞給REST方法。另外我想在保存之後返回一個複雜對象的實例。

我把一些'客戶'代碼放在一起測試了這一點。

@Test 
public void saveTest() { 
    WebResource wsClient = createWebServiceClient(); 

    MyComplexObject unsavedInstance = createMyComplexObject(); 

    MyComplexObject savedInstance = 
      wsClient 
      .path("saveObject") 
      .accept(MediaType.APPLICATION_XML) 
      .put(MyComplexObject.class, unsavedInstance); 

    assertNotNull(savedIntent); 
} 

這是返回以下錯誤:

com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:8081/rest/myresource/save returned a response status of 400 Bad Request 

我不明白這是爲什麼不工作,我想我已經嘗試了一切我能想到的。任何幫助或方向將非常感激。

非常感謝!

+0

我想我可能找到了我的問題。 'MyComplexObject'實際上是MyBaseComplexObject的子類 - 我爲我的ORM層使用'joined class'繼承模型。我把'MyBaseComplexObject'定義爲一個抽象類,即:它不能被實例化。讓它成爲一個真正的,非抽象的,具體的課程,它似乎在我的測試中發揮了重要作用。當我對此有更多的評論時,我會報告回來。 – Joel

回答

0

我在之前的評論中提到的「具體班級」解決方案轉而解決了我的問題。

1

我看到你在你的測試客戶端調用了accept()方法(這意味着一個「Accept:」頭被添加到請求中,表明服務器你想要什麼類型的表示)。但是,您不要調用type()方法來添加「Content-type:」標頭,並通知服務器您正在發送XML數據。示例請參見http://jersey.java.net/nonav/documentation/latest/client-api.html#d4e644

邊注:您的網址不是REST風格的 - 你應該避免在您的路徑動詞:

因此,而不是:

/api/findObject/{id} 
/api/saveObject 

你應該使用:

/api/objects/{id} 
/api/objects 

最後一個音符:在調用/ api/objects時創建一個對象,您應該執行POST而不是PUT來遵守REST最佳實踐和廣泛採用的模式。

+0

偉大的評論!非常感謝! – Joel

相關問題