テスト目的のRESTAPI呼び出しのペイロードとしてPOSTになる巨大なJSONファイルがあります。次のようなものを試しました:
public void RestTest() throws Exception {
File file = new File("/Users/bmishra/Code_Center/stash/experiments/src/main/resources/Search.json");
String content = null;
given().body(file).with().contentType("application/json").then().expect().
statusCode(200).
body(equalTo("true")).when().post("http://devsearch");
}
次のようにエラーが発生します:
Java.lang.UnsupportedOperationException: Internal error: Can't encode /Users/bmishra/Code_Center/stash/experiments/src/main/resources/Search.json to JSON.
ファイルを読み取り、本文を文字列として渡すことで実行できますが、ファイルオブジェクトを直接渡すことができ、これは機能しません。
十分に調べたところ、うまくいかないようです。安心して問題を解決しました。 https://github.com/jayway/rest-assured/issues/674
安心したチームに問題を投稿した後。修正があります。修正をテストしたところ、問題は解決しました。
安心からのメッセージ:
修正する必要があるため、この問題に対処する新しいスナップショットを展開しました。次のMavenリポジトリを追加した後、バージョン2.9.1-SNAPSHOTを試してください:
<repositories>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<snapshots />
</repository>
</repositories>
詳細情報: https://github.com/jayway/rest-assured/issues/674#issuecomment-210455811
ジェネリックメソッドを使用してjsonから読み取り、それを文字列として送信します。
public String generateStringFromResource(String path) throws IOException {
return new String(Files.readAllBytes(Paths.get(path)));
}
だからあなたの例では:
@Test
public void post() throws IOException {
String jsonBody = generateStringFromResource("/Users/bmishra/Code_Center/stash/experiments/src/main/resources/Search.json")
given().
contentType("application/json").
body(jsonBody).
when().
post("http://dev/search").
then().
statusCode(200).
body(containsString("true"));
}