如何看到安心送来的真身

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());