В REST Assured, как решить UnrecognizedPropertyException при отображении ответа на объект? - PullRequest
0 голосов
/ 26 июня 2018

Я новичок в тестировании 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",  "ed26dfdasdf39@gmail.com"); 


        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) ......

Пожалуйста, помогите, я погуглил решения, но ничего из этого не связано с тем, с чем я сталкиваюсь здесь

1 Ответ

0 голосов
/ 29 июня 2018

Вы не должны игнорировать неизвестные свойства, потому что их нет. Ответ именно то, что вы ожидаете:

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

Но ваш класс ответа неверно настроен. Попробуйте аннотировать поля с помощью @ JsonProperty.

public class RegistrationFailureResponse {

    @JsonProperty private String FaultId;
    @JsonProperty private String fault;
}
...