我是 REST Assured API 测试的新手,我已经将 jackson-databind、jackson-annotations 和 jackson-core 所有 2.9.6 版本添加到库中。
下面是我的代码:
public class SerializeAndDeserialize {
@Test
public void RegistrationSuccessful()
{
RestAssured.baseURI ="http://restapi.demoqa.com/customer";
RequestSpecification request = RestAssured.given();
JSONObject requestParams = new JSONObject();
requestParams.put("FirstName", "Virkjdender"); // Cast
requestParams.put("LastName", "Scklxjingh");
requestParams.put("UserName", "63userf2d3cn,mxd2011");
requestParams.put("Password", "passwors000mxzmd1");
requestParams.put("Email", "[email protected]");
request.body(requestParams.toJSONString());
Response response = request.post("/register");
ResponseBody body = response.getBody();
System.out.println(response.body().asString());
System.out.println(response.contentType());
System.out.println(response.getStatusCode());
if(response.statusCode() == 200)
{
// Deserialize the Response body into RegistrationFailureResponse
RegistrationFailureResponse responseBody = body.as(RegistrationFailureResponse.class);
Assert.assertEquals("User already exists", responseBody.FaultId);
Assert.assertEquals("FAULT_USER_ALREADY_EXISTS", responseBody.fault);
}
else if (response.statusCode() == 201)
{
// Deserialize the Response body into RegistrationSuccessResponse
RegistrationSuccessResponse responseBody = body.as(RegistrationSuccessResponse.class);
Assert.assertEquals("OPERATION_SUCCESS", responseBody.SuccessCode);
Assert.assertEquals("Operation completed successfully", responseBody.Message);
}
}
}
相关类如下:
public class RegistrationFailureResponse {
@JsonIgnoreProperties(ignoreUnknown = true)
String FaultId;
String fault;
}
另一张:
public class RegistrationSuccessResponse {
@JsonIgnoreProperties(ignoreUnknown = true)
public String SuccessCode;
public String Message;
}
当我尝试通过 Testng.xml 文件运行上述代码时,出现以下错误:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“FaultId”(类 RegistrationFailureResponse),未标记为可忽略(0 个已知属性:]) 在[来源:(字符串)”{ "FaultId": "用户已存在", “故障”:“FAULT_USER_ALREADY_EXISTS” }"; 行:2,列:17](通过参考链:RegistrationFailureResponse["FaultId"]) 在 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:60) 在com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:822) 在 com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1152) 在com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1589) 在com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1567) 在com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:294) 在com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151) 在com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013) 在 com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3042) 在 com.fasterxml.jackson.databind.ObjectMapper$readValue$0.call(来源未知) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) ......
请帮忙,我用谷歌搜索了解决方案,但没有一个与我在这里面临的问题相关
您实际上不应该忽略未知属性,因为根本不存在。响应正是您所期望的:
{
"FaultId": "User already exists",
"fault": "FAULT_USER_ALREADY_EXISTS"
}
但是您的响应类配置错误。尝试使用 @JsonProperty 注释您的字段。
public class RegistrationFailureResponse {
@JsonProperty private String FaultId;
@JsonProperty private String fault;
}