Writing response into a JSON file
Rest Assured provides below methods to get a response as:-
- As byte array :- asByteArray()
- As input stream :- asInputStream()
- As string :- asString()
All the above methods output can be used to write into a JSON file.
Example program
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import com.google.common.io.Files;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
public class WriteResponseInTextFile {
public static void main(String[] args) throws IOException {
// There is no need to add escape character manually. Just paste string within
// double
// quotes. It will automatically add escape sequence as required.
String jsonString = "{\"username\" : \"admin\",\"password\" : \"password123\"}";
// Create a request specification
RequestSpecification request = RestAssured.given();
// Setting content type to specify format in which request payload will be sent.
// ContentType is an ENUM.
request.contentType(ContentType.JSON);
// Adding URI
request.baseUri("https://restful-booker.herokuapp.com/auth");
// Adding body as string
request.body(jsonString);
// Calling POST method on URI. After hitting we get Response
Response response = request.post();
// Getting response as a string and writing in to a file
String responseAsString = response.asString();
// Converting in to byte array before writing
byte[] responseAsStringByte = responseAsString.getBytes();
// Creating a target file
File targetFileForString = new File("src/main/resources/targetFileForString.json");
// Writing into files
Files.write(responseAsStringByte, targetFileForString);
// Getting response as input stream and writing in to a file
InputStream responseAsInputStream = response.asInputStream();
// Creating a byte array with number of bytes of input stream (available()
// method)
byte[] responseAsInputStreamByte = new byte[responseAsInputStream.available()];
// Reads number of bytes from the input stream and stores them into the byte
// array responseAsInputStreamByte.
responseAsInputStream.read(responseAsInputStreamByte);
// Creating a target file
File targetFileForInputStream = new File("src/main/resources/targetFileForInputStream.json");
// Writing into files
Files.write(responseAsInputStreamByte, targetFileForInputStream);
// Directly getting a byte array
byte[] responseAsByteArray = response.asByteArray();
// Creating a target file
File targetFileForByteArray = new File("src/main/resources/targetFileForByteArray.json");
// Writing into files
Files.write(responseAsByteArray, targetFileForByteArray);
}
}
Output
Refresh the project folder if you are using Eclipse. You should see three files as below:-
Open a file you should see it has stored response as below:-
You may be thinking about which way is more optimal if you want to write into a file. If you notice that we get a response as String or inputStream, we just need to convert them to Byte array before writing into a file. In the third way, we are directly getting Byte Array. Hence the third way is more optimal.