RestEasy:如何validationClientResponse正文?

我有一个REST端点

 @GET @Produces(MediaType.APPLICATION_JSON) public Response getVariables(@QueryParam("_activeonly") @DefaultValue("no") @Nonnull final Active active) { switch(active){ case yes: return Response.ok(VariablePresentation.getPresentationVariables(variableManager.getActiveVariables())).build(); case no: return Response.ok(VariablePresentation.getPresentationVariables(variableManager.getVariables())).build(); } throw new WebApplicationException(Response.Status.BAD_REQUEST); } 

返回VariablePresentation ListJSONVariablePresentaion看起来像

 @XmlRootElement public class VariablePresentation { private final UUID id; private final String name; private final VariableType type; public VariablePresentation(@Nonnull final Variable variable) { id = variable.getId(); name = variable.getName(); type = variable.getType(); } public String getId() { return id.toString(); } @Nonnull public String getName() { return name; } @Nonnull public VariableType getType() { return type; } 

JAXBXmlRoot注释以返回JSON 。 我的集成测试如下

 @Test public void testGetAllVariablesWithoutQueryParamPass() throws Exception { final ClientRequest clientCreateRequest = new ClientRequest("http://localhost:9090/variables"); final MultivaluedMap formParameters = clientCreateRequest.getFormParameters(); final String name = "testGetAllVariablesWithoutQueryParamPass"; formParameters.putSingle("name", name); formParameters.putSingle("type", "String"); formParameters.putSingle("units", "units"); formParameters.putSingle("description", "description"); formParameters.putSingle("core", "true"); final ClientResponse clientCreateResponse = clientCreateRequest.post(String.class); assertEquals(201, clientCreateResponse.getStatus()); } 

我想测试请求体,它将List作为String返回。 如何将响应体(String)转换为VariablePresentation对象?

更新

添加以下内容后

  final GenericType<List> typeToken = new GenericType<List>() { }; final ClientResponse<List> clientCreateResponse = clientCreateRequest.post(typeToken); assertEquals(201, clientCreateResponse.getStatus()); final List variables = clientCreateResponse.getEntity(); assertNotNull(variables); assertEquals(1, variables.size()); 

它失败了不同的错误

 testGetAllVariablesWithoutQueryParamPass(com.myorg.project.market.integration.TestVariable): Unable to find a MessageBodyReader of content-type application/json and type java.util.List 

我该如何解决这个问题?

我发现最简单的方法是使用ClientResponse和Gson

一个简单的例子可能是

  @Test public void testGetAllVariablesWithoutQueryParamNoPass() throws Exception { final ClientRequest clientCreateRequest_var0 = new ClientRequest("http://localhost:9090/variables?_activeonly=no"); final MultivaluedMap formParameters = clientCreateRequest_var0.getFormParameters(); final String name0 = "testGetAllVariablesWithoutQueryParamNoPass_0"; formParameters.putSingle("name", name0); formParameters.putSingle("type", "String"); formParameters.putSingle("units", "units"); formParameters.putSingle("description", "description"); formParameters.putSingle("core", "true"); final ClientResponse clientCreateResponse_var0 = clientCreateRequest_var0.post(String.class); assertEquals(201, clientCreateResponse_var0.getStatus()); final ClientRequest clientCreateRequest_var1 = new ClientRequest("http://localhost:9090/variables"); final MultivaluedMap formParameters1 = clientCreateRequest_var1.getFormParameters(); final String name1 = "testGetAllVariablesWithoutQueryParamNoPass_1"; formParameters1.putSingle("name", name1); formParameters1.putSingle("type", "String"); formParameters1.putSingle("units", "units"); formParameters1.putSingle("description", "description"); formParameters1.putSingle("core", "true"); final ClientResponse clientCreateResponse_var1 = clientCreateRequest_var1.post(String.class); assertEquals(201, clientCreateResponse_var1.getStatus()); final ClientRequest clientCreateRequest2 = new ClientRequest("http://localhost:9090/variables"); final ClientResponse clientCreateResponse2 = clientCreateRequest2.get(String.class); final Gson gson = new Gson(); final Type variableType = new TypeToken>() { }.getType(); List variables = gson.fromJson(clientCreateResponse2.getEntity(), variableType); assertNotNull(variables); assertEquals(2, variables.size()); // clean test data removeTestDataVariableObject(name0); removeTestDataVariableObject(name1); }