我有一个我想测试的资源。为此,我想从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...
}
答案 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(...
}