我很难设置某些东西,我很确定/应该/很容易,所以我想我会把它扔给人群。我似乎无法找到我在网络上或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