Неверный запрос 400 и ошибка десериализации при тестировании API с использованием метода put sure - PullRequest
1 голос
/ 28 июня 2019

Я тестирую конечную точку с указанием пути и параметра запроса и обновляю запрос некоторыми параметрами. Когда я отправляю запрос, тип контента - json и запрос выглядит хорошо с данными, которые я пытаюсь изменить, однако, когда ответ получен

тип содержимого текстовый и я получаю 400 ошибок плохой запрос в качестве кода состояния и сообщение об ошибке

javax.ws.rs.ProcessingException: RESTEASY008200: Ошибка десериализации привязки JSON: javax.json.bind.JsonbException: не может выводить тип для демаршаллинга в: java.util.List

мой код

@Given("^api is set up with required details$")
public void api_is_set_up_with_user_data() throws Throwable {
    loadProp();
    base_url = prop.getProperty("baseurl");
    RestAssured.baseURI = base_url;

}

@When("^a user retrieves the preferences by userid \"([^\"]*)\" and type \"([^\"]*)\"$")
public void a_user_retrieves_the_preferences_by_userid_and_type(String userid, String parameter) throws Throwable {
    request = given().pathParam("user_id", userid).queryParam("type", parameter);
    System.out.println(request);
    ENDPOINT_GET_USER_BY_ID = base_url + "{user_id}/preferences";
    response = request.when().get(ENDPOINT_GET_USER_BY_ID);
    System.out.println("response: " + response.prettyPrint());
}

@Then("^updates the value \"([^\"]*)\" of name \"([^\"]*)\"$")
public void updates_the_value_of_name(String value, String displaytext) throws Throwable {
    HashMap<String,String> post = new HashMap<String,String>();
    post.put("displaytext",displaytext);
    post.put("value",value);
    response = request.contentType("application/json").accept("*/*").body(post).put(ENDPOINT_GET_USER_BY_ID);
//        response = request.header("Content-Type", "application/json").body(post).put(ENDPOINT_GET_USER_BY_ID);

    System.out.println("Response : " + response.asString());
    System.out.println("Statuscode : " +response.getStatusCode());

}

enter image description here enter image description here

1 Ответ

1 голос
/ 28 июня 2019

Как вы уже поделились в своем комментарии, конечная точка ожидает список объектов, а не отдельный объект, который вы отправляете ... Просто попробуйте обернуть его списком, и вы получите ошибку 400.

Что вы отправляете;

{
    "displayText": "Warrants", 
    "value": "true"  // I don't know about this value field here
}

Что ожидается, когда вы поделились;

[ 
    {
        "displayText": "", 
        "preferences": [ { "category": "", "displaytext": "", } ], 
        "priority": "20" 
    }
] 

Одна проблема заключается в том, что вы должны отправлять объект в списке, также передавая объекты, так как карта также несколько неэффективна, лучше использовать тот же объект, что и в RQ.

public class Request {

    private String displayText;
    private List<Preference> preferences;
    private Integer priority;

    //getter, setter,etc
}

и используйте его в своем теле в тесте на уверенность;

List<Request> requestList = new ArrayList<>();
Request request = new Request();
request.setDisplayText("etc");
... // set other stuff
requestList.add(request);
response = request.contentType("application/json").accept("*/*").body(requestList).put(ENDPOINT_GET_USER_BY_ID);
...