【问题标题】:how to see actual body sent from restassured如何查看从放心发送的实际身体
【发布时间】:2015-08-19 02:25:18
【问题描述】:

我创建了一个 jax-rs rest api 并放心地对其进行了测试。所有测试都是绿色的。现在我正在尝试为它创建一个 html/js 前端。

我的问题是我不知道我的 json 对象应该如何被我的 rest api 接受。感谢 reassured/jax-rs 我从来没有处理过请求字符串。我填写对象并得到对象,(un)marshaling (json) 是不可见的。

有什么方法可以查看(调试)rest-assured/java 创建并通过“电线”发送的字符串?

【问题讨论】:

    标签: jax-rs wildfly rest-assured


    【解决方案1】:

    如果你想记录请求正文,你可以这样做:

    given().log().body(). ..
    

    或者,如果您想记录响应正文,您可以这样做:

    .. .then().log().body(). ..
    

    更多详情请见documentation on logging

    【讨论】:

      【解决方案2】:

      我不是 RestAssured,因此无法直接回答您的问题,但这里有一些想法可能会对您有所帮助。

      • 我不知道 RestAssured 在后台使用什么序列化程序,但 Wildfly 上的 Resteasy 默认使用 Jackson。我会熟悉这个库。对于不太琐碎的应用程序,您可能需要直接深入研究其 API 以获得所需的结果。这是documentation。对于您的特定情况,您可以做一些简单的事情

        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writeValueAsString(yourObject);
        System.out.println(jsonString);
        

        这将根据您在类中的 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
        

        所以例如你有这个类

        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 对象。

      希望这会有所帮助。

      【讨论】:

      • 感谢您的深入解答!第一部分帮助最大(我已经为测试添加了杰克逊依赖项) - 所以我使用你的代码示例来转换这些东西。
      【解决方案3】:

      在 RestAssured 中只使用这个:

      String body = resp.asString(); System.out.println(body);

      【讨论】:

      • 我认为作者想要解决请求,而不是响应
      猜你喜欢
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2013-04-26
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多