Java Person
クラスがあるとしましょう:
class Person {
String name;
String email;
}
REST Assuredを使用すると、このJSONオブジェクトをデシリアライズできます
{"name":"Bob", "email":"[email protected]"}
Java Person
インスタンスを使用して
Person bob = given().when().get("person/Bob/").as(Person.class);
RESTこのJSON配列をデシリアライズすることを保証する方法
[{"name":"Bob", "email":"[email protected]"},
{"name":"Alice", "email":"[email protected]"},
{"name":"Jay", "email":"[email protected]"}]
に List<Person>
?たとえば、これは便利です。
List<Person> persons = given().when().get("person/").as(...);
私が望んでいたことを達成する方法を見つけました:
List<Person> persons = given().when().get("person/").as(Person[].class);
PDATE: Rest-Assured 1.8.1を使用すると、リストへのキャストはサポートされなくなります。次のようなオブジェクト配列を宣言する必要があります。
Person[] persons = given().when().get("person/").as(Person[].class);
受け入れられた答えがもう機能しないことがわかった人のために。
List<Entity> list = new ArrayList<>();
list = given()
.contentType(CONTENT_TYPE)
.when()
.get(getRestOperationPath())
.then()
.extract().body().as(list.getClass());
うまくいけば、getRestOperationPathが残りの操作パスを返していることを理解できます。 CONTENT_TYPEはコンテンツタイプのプレースホルダーです(例:application/json)
upd:異なるバージョンをチェック、動作はバージョンによって異なるため、異なるアプローチを試してください
upd2:cleaner solutionは@Arigionによってコメントで指摘されました:
to use .extract().body().jsonPath().getList(".", Entity.class);
JSON APIレスポンスからJavaリストではなく配列)を抽出するには、jsonPath
ではなくas
を使用することを忘れないでください:
List<Person> persons = given()
.when()
.get("/person")
.then()
.extract()
.body()
// here's the magic
.jsonPath().getList(".", Person.class);
あなたのjsonパスは、あなたの体の中にjsonオブジェクトのリストがあると予想される場所を指すことができます。この例では(そしてあなたの質問に取り組んで)jsonルートを指し示しています。
sidenode:rest-assuredは内部的に逆シリアル化にjacksonを使用しています(.jsonPath
と同様 .as
)
「expect()」の使用に興味がある場合にもこれを行うことができます
expect().
body("get(0).firstName", equalTo("Mike")).
when().
get("person/");
これは私の場合でした
まだ探している人がいるなら。 Java 1.8およびRestAssured 2.9を使用すると、ソリューションは非常に簡単になり、「未確認の警告」がスローされません。
return Arrays.asList(given()
.when()
.get("restPath")
.then()
.extract()
.response()
.body()
.as(Player[].class));
これは役立つでしょう、安心の現在のバージョンで動作します。
@Test
public void apostUser() {
Map<String,String> user = new HashMap<>();
user.put("User_Id", "xyx1111");
user.put("First_Name", "KS");
user.put("Designation", "DR");
given()
.contentType("application/json")
.body(user)
.when().post("URI").then()
.statusCode(200);
}
JsonPathに慣れていない場合は、GSONまたはJacksonを使用して任意のJavaシリアライゼーション/デシリアライゼーションを使用することをお勧めします。