如何看到安心送来的真身
how to see actual body sent from restassured
我创建了一个jax-rs rest api,放心测试。所有测试都是绿色的。现在我正在尝试为其创建一个 html/js 前端。
我的问题是我不知道我的 json 对象应该如何被我的其余 api 接受。感谢 restassured/jax-rs 我从未处理过请求字符串。我填充对象并获取对象,(un)编组 (json) 是不可见的。
有什么方法可以查看(调试)rest-assured/java 创建并通过 "wire" 发送的字符串?
我不是 RestAssured 用户,所以我不能直接回答你的问题,但这里有一些想法可能会对你有所帮助。
我不知道 RestAssured 在底层使用什么序列化程序,但 Wildfly 上的 Resteasy 默认使用 Jackson。我会熟悉这个图书馆。对于不那么琐碎的应用程序,您可能需要直接深入研究其 API 以获得所需的结果。这是 documentation。对于您的特定情况,您可以做一些简单的事情
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(yourObject);
System.out.println(jsonString);
这将根据 class 中的 getter 以 JSON 格式打印出 POJO。这是最基本的水平。如果你还没有 Jackson 作为依赖,你可以添加
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.0</version>
</dependency>
一个非常好的朋友(工具)是cURL。它是一个命令行工具,允许您发出 REST/HTTP(其他协议也一样)请求。尽管对于这种特殊情况它无济于事,但您可以向您的资源发送 GET 请求,该资源提供与您在 POST 中接受的类型相同的资源。这样,您就可以看到结果 JSON。在这一点上这可能有点多,但如果您要进行大量 REST 开发,我肯定会研究这个工具。
您可能还想查看浏览器工具,例如 [Postman for Chrome]
你真的应该熟悉 JSON format。熟悉它并开始使用 JSON 框架后,您会注意到在基本层面上,它们的工作方式都相似。
Java Object == JSON Object ( {} )
Java Collection/Array == JSON Array ( [] )
Java fields/properties == JSON keys
Getters are used for they keys and their values (for serialization)
Setters are used for deserialization
例如你有这个 class
public class Person {
String name;
List<Person> friends;
public String getName() { return name; }
public void setName(String name) { return name; }
// Getter and Setter for friends
}
Person
的实例将产生以下 JSON
{
"name" : "Peeskillet",
"friends": [
{
"name": "Lebron James"
},
{
"name": "Steph Curry"
}
]
}
一旦你掌握了它,它实际上非常简单。
- 哦,你可以做的另一件事是在服务器端添加一个日志过滤器 as mentioned here。
就使用 Javascript 而言,有一个 JSON.stringify(javascriptObject)
可以将您的 Javacript 对象序列化为 JSON 字符串。所以一般来说,您可以像 Java 对象一样为 Javascript 对象建模。
希望对您有所帮助。
在 RestAssured 中只需使用这个:
String body = resp.asString();
System.out.println(body);
如果你想记录请求正文,你可以这样做:
given().log().body(). ..
或者如果你想记录响应正文,你可以这样做:
.. .then().log().body(). ..
有关详细信息,请参阅 documentation on logging。
为请求正文试试这个
RequestSpecification httpRequest = RestAssured.given().urlEncodingEnabled(true);
..
..
..
System.out.println(" Body ==> "+ httpRequest.log().body());
对于响应正文:
System.out.println("Res Body ===>"+ response.getBody().prettyPrint());
我创建了一个jax-rs rest api,放心测试。所有测试都是绿色的。现在我正在尝试为其创建一个 html/js 前端。
我的问题是我不知道我的 json 对象应该如何被我的其余 api 接受。感谢 restassured/jax-rs 我从未处理过请求字符串。我填充对象并获取对象,(un)编组 (json) 是不可见的。
有什么方法可以查看(调试)rest-assured/java 创建并通过 "wire" 发送的字符串?
我不是 RestAssured 用户,所以我不能直接回答你的问题,但这里有一些想法可能会对你有所帮助。
我不知道 RestAssured 在底层使用什么序列化程序,但 Wildfly 上的 Resteasy 默认使用 Jackson。我会熟悉这个图书馆。对于不那么琐碎的应用程序,您可能需要直接深入研究其 API 以获得所需的结果。这是 documentation。对于您的特定情况,您可以做一些简单的事情
ObjectMapper mapper = new ObjectMapper(); String jsonString = mapper.writeValueAsString(yourObject); System.out.println(jsonString);
这将根据 class 中的 getter 以 JSON 格式打印出 POJO。这是最基本的水平。如果你还没有 Jackson 作为依赖,你可以添加
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.0</version> </dependency>
一个非常好的朋友(工具)是cURL。它是一个命令行工具,允许您发出 REST/HTTP(其他协议也一样)请求。尽管对于这种特殊情况它无济于事,但您可以向您的资源发送 GET 请求,该资源提供与您在 POST 中接受的类型相同的资源。这样,您就可以看到结果 JSON。在这一点上这可能有点多,但如果您要进行大量 REST 开发,我肯定会研究这个工具。
您可能还想查看浏览器工具,例如 [Postman for Chrome]
你真的应该熟悉 JSON format。熟悉它并开始使用 JSON 框架后,您会注意到在基本层面上,它们的工作方式都相似。
Java Object == JSON Object ( {} ) Java Collection/Array == JSON Array ( [] ) Java fields/properties == JSON keys Getters are used for they keys and their values (for serialization) Setters are used for deserialization
例如你有这个 class
public class Person { String name; List<Person> friends; public String getName() { return name; } public void setName(String name) { return name; } // Getter and Setter for friends }
Person
的实例将产生以下 JSON{ "name" : "Peeskillet", "friends": [ { "name": "Lebron James" }, { "name": "Steph Curry" } ] }
一旦你掌握了它,它实际上非常简单。
- 哦,你可以做的另一件事是在服务器端添加一个日志过滤器 as mentioned here。
就使用 Javascript 而言,有一个 JSON.stringify(javascriptObject)
可以将您的 Javacript 对象序列化为 JSON 字符串。所以一般来说,您可以像 Java 对象一样为 Javascript 对象建模。
希望对您有所帮助。
在 RestAssured 中只需使用这个:
String body = resp.asString();
System.out.println(body);
如果你想记录请求正文,你可以这样做:
given().log().body(). ..
或者如果你想记录响应正文,你可以这样做:
.. .then().log().body(). ..
有关详细信息,请参阅 documentation on logging。
为请求正文试试这个
RequestSpecification httpRequest = RestAssured.given().urlEncodingEnabled(true);
..
..
..
System.out.println(" Body ==> "+ httpRequest.log().body());
对于响应正文:
System.out.println("Res Body ===>"+ response.getBody().prettyPrint());