2012-12-21 55 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

相关问题