我很難設置某些東西,我很確定/應該/很容易,所以我想我會把它扔給人羣。我似乎無法找到我在網絡上或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
我不明白這是爲什麼不工作,我想我已經嘗試了一切我能想到的。任何幫助或方向將非常感激。
非常感謝!
我想我可能找到了我的問題。 'MyComplexObject'實際上是MyBaseComplexObject的子類 - 我爲我的ORM層使用'joined class'繼承模型。我把'MyBaseComplexObject'定義爲一個抽象類,即:它不能被實例化。讓它成爲一個真正的,非抽象的,具體的課程,它似乎在我的測試中發揮了重要作用。當我對此有更多的評論時,我會報告回來。 – Joel