jackson 在REST Assured中,如何在将响应Map到对象时解决UnrecognizedPropertyException?

nbewdwxp  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(69)

我是REST Assured API测试的新手,我已经将jackson-databind,jackson-annotations和jackson-core All 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个已知属性:])at [Source:(String)"{"FaultId":"用户已存在","错误":"FAULT_USER_ALREADY_EXISTS "};行:2,列:17](通过参考链:RegistrationFailureResponse ["FaultId"])在com. fasterxml。Jackson。数据绑定不包括在内UnrecognizedPropertyException。从(UnrecognizedPropertyException.java:60)在com. fasterxml。Jackson。数据绑定ializationContext.在com上搜索UnknownProperty(UnknowalizationContext.java:822)。fasterxml。Jackson。数据绑定沙漠。标准标准化器。在com上搜索UnknownProperty(Stdallializer.java:1152)。fasterxml。Jackson。数据绑定沙漠。BeanxurializerBase.在com上搜索UnknownProperty(BeanburializerBase.java:1589)。fasterxml。Jackson。数据绑定沙漠。BeanxurializerBase. UnknownVanilla(BeanknownializerBase.java:1567)at com. fasterxml。Jackson。数据绑定沙漠。豆子机vanillaalizer.java:294)at com. fasterxml。Jackson。数据绑定沙漠。豆子机在com.fasterxml.jackson.databind.ObjectMapper上重新编译(BeanDataAlizer.java:151)。_readMapAndClose(ObjectMapper.java:4013)at com. fasterxml。Jackson。数据绑定ObjectMapper。readValue(ObjectMapper.java:3042)at com.fasterxml.jackson.databind.ObjectMapper$readValue$0.call(Unknown Source)at org. codehaus。太棒了。运行时。callsite. CallSiteArray。defaultCall(CallSiteArray.java:48)at
请帮助,我谷歌的解决方案,但没有一个是与我在这里面临的

kcugc4gi

kcugc4gi1#

实际上,您不应该忽略未知属性,因为根本就没有未知属性。答案正是你所期待的:

{ 
  "FaultId": "User already exists",
  "fault": "FAULT_USER_ALREADY_EXISTS"
}

但是你的响应类配置错误。尝试使用@JsonProperty注解您的字段。

public class RegistrationFailureResponse {
    @JsonProperty private String FaultId;
    @JsonProperty private String fault;
}

相关问题