如何从响应对象获取myObject

时间:2017-02-21 16:39:52

标签: java junit

我有一个我想测试的资源。为此,我想从javax.ws.rs.core.Response中提取myObject。我怎么能这样做?

资源如下所示:

@Post
@Path("/test")
public MyObjectClass myresource(){return myObject}

我的测试:

@Test
public void test(){
Response response = resources.getJersyTest()
    .target("/test")
    .request()
    .post(javax.ws.rs.client.Entity.json(String.class));

assertThat...
}

2 个答案:

答案 0 :(得分:0)

通常,从Rest资源返回自定义对象不是一个好主意。您可以重新考虑使用标准格式JSON或XML之一并返回响应而不是MyObjectClass。您还需要将请求或字符串(或两者)作为参数提供给资源方法,以处理您在请求中发布的内容。

例如:

@Post
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public Response myresource(@Context HttpServletRequest request, String postedBody){
   MyObjectClass myObject = new MyObjectClass();
   // ... set myObject properties ...
   return Response.status(200).entity(myObject).build();
}

当然,对于JSON,您的MyObjectClass必须为JSON注释... 然后在客户端的响应中,您将在myObject中获得response.getEntity的JSON表示,并且可以将其解组回MyObjectClass。

但是如果您仍想要返回自定义对象,则必须创建一种机制来对两侧的对象进行编组/解组。

检查此答案RestEasy - Jax-rs - Sending custom Object in response body

在单元测试的其他人手中,您可以直接调用您的资源方法,只需投射结果。

答案 1 :(得分:0)

我找到了另一个解决方案,只需在功能帖子中指定响应的类型:

@Test
public void test(){
MyObjectClass response = resources.getJersyTest()
    .target("/test")
    .request()
    .post(javax.ws.rs.client.Entity.json(String.class), MyObjectClass.class);
assertThat(...
}